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 は関係ありません。
基本認証の後。
ユーザーが開始ページに入ります。そこには検索ページへのリンクを含むメニューが含まれており、このリンクには jsession ID があります (他のすべてのリンクには同じ jsessionId があります) - 詳細;
- リクエスト:
http://localhost:8080/myApp/start/start.xhtml
- 応答内容:
<a href="/myApp/search/search.xhtml;jsessionid=8df431e2275052cf2348a4cb793e">search</a>
- リクエスト:
ユーザーはそのリンクをクリックします。返されたページには再びメニューが含まれていますが、すべてのリンクに別のセッションがあります - 詳細:
- リクエスト
http://localhost:8080/myApp/suche/teilnehmer_suche.xhtml;jsessionid=8df431e2275052cf2348a4cb793e
- 応答内容:
<a href="/myApp/search/search.xhtml;jsessionid=8ebeefb6df144a2fee97d87a51e6">...
- リクエスト
ユーザーがそのリンクをもう一度クリックすると、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