6

Glassfish 3.1.2 で JSF 2、EJB 3.1、CDI アプリケーションを実行しています。jsession ID が常に変化することに気付きました。サーバーにリクエストを送信するたびに、リクエストにすでに jsession ID が含まれている場合でも、返されたページには新しい jsession ID を持つリンク () が含まれます。

これは正常ではないと思いますが、何がこの動作を引き起こすのかわかりません。

私は設定しました:

<session-config>
    <session-properties>
        <property name="enableCookies" value="false" />
        <property name="enableURLRewriting" value="true" />
    </session-properties>
</session-config>

しかし、それ以外はすべてデフォルトです。奇妙な構成やカスタム jsession 生成のものはありません。-- Glassfish/JSF が sessionId を変更する原因を知っている人はいますか?

例:

アプリケーションには、すべてのページに表示されるメニューがあります。jsf ページには次の内容が含まれます。

<h:link outcome="/search/search">search</h:link>

次に、リクエストとレスポンスについて説明します。リクエストは単純な HTTP GET リクエストです。応答には常に完全なページが含まれます。Ajax は関係ありません。

  1. 基本認証の後。

  2. ユーザーが開始ページに入ります。そこには検索ページへのリンクを含むメニューが含まれており、このリンクには jsession ID があります (他のすべてのリンクには同じ jsessionId があります) - 詳細;

    • リクエスト:http://localhost:8080/myApp/start/start.xhtml
    • 応答内容:<a href="/myApp/search/search.xhtml;jsessionid=8df431e2275052cf2348a4cb793e">search</a>
  3. ユーザーはそのリンクをクリックします。返されたページには再びメニューが含まれていますが、すべてのリンクに別のセッションがあります - 詳細:

    • リクエストhttp://localhost:8080/myApp/suche/teilnehmer_suche.xhtml;jsessionid=8df431e2275052cf2348a4cb793e
    • 応答内容:<a href="/myApp/search/search.xhtml;jsessionid=8ebeefb6df144a2fee97d87a51e6">...
  4. ユーザーがそのリンクをもう一度クリックすると、jsession ID が再び変更されます。

    • リクエストhttp://localhost:8080/myApp/suche/teilnehmer_suche.xhtml;jsessionid=8df431e2275052cf2348a4cb793e
    • 応答内容:<a href="/myApp/search/search.xhtml;jsessionid=8f4021c2fa628ce3b9c12c545cc4">...

そのリンク (および他のすべてのリンク) を何度もクリックできますが、jsession ID は毎回変更されます。


さらに奇妙: urlRewriting の代わりに Cookie を使用するように構成を変更した後、リソース ファイルでもこの​​動作が発生することがわかりました。

クライアントが jsession ID なしで start.xml を要求すると、サーバーはSet-Cookie JSESSIONID=a68d3d9260d7ea5fd36a7713eb80; Path=/myapp; HttpOnly応答ヘッダーで返します。

その後、クライアントは css ページを要求しCookie JSESSIONID=a68d3d9260d7ea5fd36a7713eb80、サーバーは css ファイルを送り返しますが、応答ヘッダーには新しいセッション ID が含まれています。Set-Cookie JSESSIONID=a68d550e5093e246b01ba4220cd3; Path=/myapp; HttpOnly

4

0 に答える 0