2.7.4 Webクライアントが保持する無効なセッションIDの削除
アプリケーションサーバでは,Webクライアントが保持する無効なセッションIDを削除します。これによって,無効なセッションIDのWebクライアントからの送信を抑止します。なお,この機能はV9互換モードの場合だけ使用できます。
HTTPセッションを無効化した場合,または無効なセッションIDを含むHTTPセッションを受信した場合,Webコンテナによって,無効なセッションIDを表すHTTP Cookie情報を削除するためのHTTP CookieがHTTPレスポンスのヘッダに付加されます。これによって,無効なセッションIDが削除されます。
無効なセッションIDを表すHTTP Cookie情報を削除するためのHTTP Cookieとは,次のすべての条件を満たすHTTP Cookieを指します。
-
セッションIDを示すHTTP Cookieであり,名称は「JSESSIONID」である(Servlet 3.0以降は変更できます)。
-
値が「""」(空文字列)である。
-
HTTP Cookieの有効期限に,経過した期限となる正の数が設定されている。
HTTPレスポンスのヘッダに,無効なセッションIDを表すHTTP Cookie情報を削除するためのHTTP Cookieが付加されるのは,次の二つの場合です。
-
HTTPセッションが無効化された。
-
J2EEサーバに存在しないセッションIDを受信した。
以降でそれぞれの場合について説明します。
- Webサーバ連携機能を使用する場合の注意事項
-
レスポンスのステータスコードが304(Not Modified)である場合に,Webサーバの仕様でSet-Cookieヘッダが削除されるときがあります。このとき,無効なセッションIDを表すHTTP Cookie情報を削除するためのHTTP Cookieも付加されなくなるため,Webクライアントが保持する無効なセッションIDの削除ができなくなります。
- 〈この項の構成〉
(1) HTTPセッションが無効化された場合
次の条件をすべて満たす場合,無効なセッションIDを表すHTTP Cookie情報を削除するためのHTTP CookieがHTTPレスポンスのヘッダに付加されます。
-
セッションIDがHTTP Cookieを使用して通知された。
-
Webアプリケーション内でHTTPレスポンスがコミットされる前にHTTPセッションが無効化された※1。
-
HTTPレスポンスのコミット時にHTTPセッションが存在しない※2。
- 注※1
-
HTTPレスポンスのヘッダは,レスポンスがコミットされた時点でWebクライアントに送信されるため,コミットしたあとのレスポンスにはHTTP Cookieを付加できません。そのため,Webアプリケーション内でHTTPレスポンスがコミットされたあとでHTTPセッションが無効化された場合,HTTP Cookie情報を削除するためのHTTP Cookieは付加されません。しかし,次回リクエスト受信時に,存在しないセッションIDを受信することになるため「2.7.4(2) J2EEサーバに存在しないセッションIDを受信した場合」に該当し,HTTP Cookie情報が削除されます。
- 注※2
-
HTTPレスポンスのコミット時に新しいHTTPセッションが作成されていた場合は,新しいセッションIDを示すHTTP CookieでWebクライアントのHTTP Cookie情報が上書きされるため,HTTP Cookie情報の削除は不要になります。
なお,次の条件のどちらかを満たす場合,HTTPセッションが無効化された場合でも,無効なセッションIDを表すHTTP Cookie情報を削除するためのHTTP Cookieは付加されません。
-
管理用サーバでリクエストを受信した。
-
webserver.session.delete_cookie.backcompatパラメタにtrueを指定している。
これらの機能は旧バージョンとの互換用の機能です。
(2) J2EEサーバに存在しないセッションIDを受信した場合
次の条件をすべて満たす場合,無効なセッションIDを受信したと判断され,無効なセッションIDを表すHTTP Cookie情報を削除するためのHTTP CookieがHTTPレスポンスのヘッダに付加されます。
-
セッションIDがHTTP Cookieを使用して通知された。
-
通知されたセッションIDがJ2EEサーバに存在しないセッションIDである。
-
HTTPレスポンスのコミット時にHTTPセッションが存在していない。
(3) Webクライアントが保持する無効なセッションIDの削除をする場合の注意事項
複数のJ2EEサーバで同じパスのリクエストを扱う構成の場合,この機能を無効にしてください。
リバースプロキシなどでCookieのPathが書き換えられた同じパスのリクエストを扱うと,HTTPセッションが不当に削除されるおそれがあります。