2.7.9 セッション管理の注意事項
セッション管理の注意事項について説明します。
- 〈この項の構成〉
(1) セッションパラメタのカスタマイズと注意事項
HTTP Cookieの名称,およびURLのパスパラメタ名は,次の設定で変更できます。
-
簡易構築定義ファイル(webserver.session.cookie_config.nameパラメタ)
-
cosminexus.xml(<war>-<session-config>-<cookie-config>-<name>タグ)
-
web.xml(/web-app/session-config/cookie-config/name要素)(Servlet 3.0以降の場合)
-
Servlet API(javax.servlet.SessionCookieConfigインタフェースのsetName()メソッド)(Servlet 3.0以降の場合)
- 注意事項
-
異なる方法による設定が存在する場合,「Servlet APIによる設定」,「cosminexus.xmlの記述」,「web.xmlの記述」,「簡易構築定義ファイルの記述」の順に設定が有効となります。
簡易構築定義ファイルのwebserver.session.cookie_config.nameパラメタがtrueで,指定したHTTP Cookieの名称,およびURLのパスパラメタ名とサーバIDのCookieの付加機能で指定したCookieの名称が重複した場合,次のように動作します。
- 簡易構築定義ファイルのwebserver.session.cookie_config.nameパラメタで指定した名称と重複した場合
-
デフォルトのセッションIDが設定されます。HTTP Cookieのときは「JSESSIONID」となります。URLのパスパラメタのときは「jsessionid」となります。
- cosminexus.xml,web.xml,またはServlet APIで指定した名称と重複した場合
-
Webアプリケーションの開始時にKDJE39338-Eが出力され,開始に失敗します。Webアプリケーションのリロード処理の実行時はKDJE39338-Eが出力され,リロード処理が続行されます。リロード処理中にKDJE39338-Eが出力された場合は,Servlet APIを使用してCookieの名前を変更したファイルを修正してから,再度リロード処理を実行してください。
(2) URL書き換えをする場合に使用するAPIと注意事項
URL書き換えは,J2EEアプリケーション内でURL書き換えを実行するServlet APIを呼び出したときに実行されます。
-
URL書き換えを実行するServlet APIとは,次に示すjavax.servlet.http.HttpServletResponseインタフェースのメソッドです。
-
encodeURL(java.lang.String url)メソッド
-
encodeRedirectURL(java.lang.String url)メソッド
-
encodeUrl(java.lang.String url)メソッド
-
encodeRedirectUrl(java.lang.String url)メソッド
これらのメソッドの詳細については,Servlet仕様を参照してください。なお,encodeUrl(java.lang.String url)メソッド,およびencodeRedirectUrl(java.lang.String url)メソッドは,Servlet 2.1以降,非推奨のAPIとなっています。このため,これら以外のメソッドを使用することをお勧めします。
ここでは,Servlet仕様で明記されていないAPIの動作として,URL書き換えを実行するServlet APIの戻り値についての,アプリケーションサーバでの動作について説明します。
HTTPセッションは,リクエスト処理中のWebアプリケーション内だけで有効です。このため,Servlet APIの引数に指定されたURLが,リクエスト処理中のWebアプリケーション内を指しているURLの場合にだけ,URL書き換えをします。引数のURLごとに,リクエスト処理中のWebアプリケーション内を指していると判定する条件を次の表に示します。
引数のURLの種類 |
判定条件 |
---|---|
相対URL ((例)/ex/a.html) |
次の条件を満たす場合にだけ,Webアプリケーション内であると判定されます。
|
絶対URL ((例)http://host1/ex/) |
次のすべての条件を満たす場合にだけ,Webアプリケーション内であると判定されます。
|
また,URL書き換えを実行するServlet APIの引数に,URL以外の文字列を指定した場合の戻り値について説明します。また,URLの先頭にクエリまたはフラグメントを指定した場合についても,あわせて説明します。
URL書き換えを実行するServlet APIの引数ごとの戻り値を次の表に示します。
次に,URL書き換えを使用してセッションIDを付加したURLの例について説明します。なお,ここで説明する例は,次の前提条件に従っています。
- 前提条件
-
-
Servlet APIは,HTTPセッションの生成後に実行されたものとします。
-
HTTPリクエストのURLは,「http://host1/gyoumu1/app1/index.jsp?type=1」です。
-
コンテキストルート名は,「/gyoumu1」です。
-
URL書き換えに使用するServlet APIの引数の指定値と書き換え後の戻り値(URL)の対応の例を次の表に示します。
Servlet APIの引数 |
戻り値 |
---|---|
b.html |
b.html;jsessionid=AAAAA111112222233333444445555566svr0 |
../b.html |
../b.html;jsessionid=AAAAA111112222233333444445555566svr0 |
../../b.html |
../../b.html |
http://host2/ |
http://host2 |
https://host1/gyoumu1/ |
https://host1/gyoumu1/;jsessionid=AAAAA111112222233333444445555566svr0 |
""(空文字列) |
"/gyoumu1/app1/index.jsp;jsessionid=AAAAA111112222233333444445555566svr0?type=1" |
"?mode=2" |
"/gyoumu1/app1/index.jsp;jsessionid=AAAAA111112222233333444445555566svr0?mode=2" |
"#aaa" |
"#aaa" |
(3) URL書き換えを使用する場合の注意事項
URL書き換えを使用する場合の注意事項について説明します。
-
静的コンテンツからの画面遷移
静的コンテンツ(HTMLファイルなど)から遷移した場合,URL書き換えによって管理されているセッションは維持されません。
URL書き換えを使用してセッションを管理する場合は,常にサーブレットまたはJSPを使用して画面を遷移するように実装してください。また,サーブレットまたはJSP内で,Servlet APIによってURLを書き換えて,セッションIDを追加する処理を実装してください。
-
Webアプリケーションで取得したリクエストURL
HTTPリクエストのURLに,URL書き換えによって追加されたセッションIDを示すパスパラメタが含まれる場合であっても,次のメソッドによって取得したURLには,セッションIDを示すパスパラメタは含まれません。
- インタフェース
-
javax.servlet.http.HttpServletRequestインタフェース
- メソッド
-
・getRequestURI()メソッド
・getRequestURL()メソッド
(4) セッションの管理に使用するHTTP CookieのSecure属性
HTTPリクエストをHTTPSプロトコルで送信した場合に,Webコンテナが生成したセッションIDがHTTP Cookieによってクライアントに返されます。そのとき,HTTP CookieにSecure属性が付与されます。
(5) HTTPセッションの属性名に関する注意事項
HTTPセッションでは,次に示す属性名の属性をアプリケーションで使用することや削除することはできません。
-
「WELD」から始まる属性名
-
「org.jboss.weld」から始まる属性名
-
「javax.faces」から始まる属性名
-
「facelets」から始まる属性名
-
「com.sun.faces」から始まる属性名
-
「csf」から始まる属性名
(6) CDI使用時のセッション情報引き継ぎ機能に関する注意事項
CDIが有効なアプリケーションに対して,各種セッションフェイルオーバ機能は使用できません。
セッションフェイルオーバ機能を使用するJ2EEサーバでは,プロパティ「ejbserver.javaee.cdi.beansXmlRequired」にtrueを指定してください。また,「beans.xml」ファイルを含んだアプリケーションをセッションフェイルオーバの対象にしないでください。セッションフェイルオーバ機能については,マニュアル「アプリケーションサーバ 機能解説 拡張編」を参照してください。