• 検索結果がありません。

セッション管理の注意事項

JSP 2.0,2.1 JSP ページ ISO-8859-1

2.7  セッション管理機能

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 アプリケーション内を 指していると判定する条件を次の表に示します。

表 2‒31 引数の URL ごとに,リクエスト処理中の Web アプリケーション内を指していると判定する条 件

引数の URL の種類 判定条件

相対 URL

((例)/ex/a.html)

次の条件を満たす場合にだけ,Web アプリケーション内であると判定されます。

• 引数の URL の正規化したパスが,リクエスト処理中の Web アプリケーションのコンテキスト ルート名を含んでいる。※1

絶対 URL

((例)http://host1/

ex/)

次のすべての条件を満たす場合にだけ,Web アプリケーション内であると判定されます。

• 引数の URL のスキームが「http」,または「https」である。※2

• 引数の URL とリクエストの URL が同一のスキームの場合,ポート番号が一致する。

• 引数の URL のホスト名が,リクエストのホスト名と一致する。※1※3

• 引数の URL の正規化したパスが,リクエスト処理中の Web アプリケーションのコンテキスト ルート名を含んでいる。※1

注※1 名称を比較する場合に,大文字,小文字を区別します。

注※2 名称を比較する場合に,大文字,小文字を区別しません。

注※3 リクエストのホスト名は,リクエストの Host ヘッダのホスト名部分とし,ホスト名の名前解決しないで,文字 列を比較します。なお,リクエストのホスト名には,javax.servlet.ServletRequest.getServerName メソッドの戻り値 を使用します。なお,次の場合は,同じホストであっても異なるホストと判定します。

• 引数の URL がホスト名の指定で,リクエストの URL が IP アドレスの場合

• 引数の URL が IP アドレスの指定で,リクエストの URL がホスト名の場合

また,URL 書き換えを実行する Servlet API の引数に,URL 以外の文字列を指定した場合の戻り値につい て説明します。また,URL の先頭にクエリまたはフラグメントを指定した場合についても,あわせて説明 します。

URL 書き換えを実行する Servlet API の引数ごとの戻り値を次の表に示します。

表 2‒32 URL 書き換えを実行する Servlet API の引数ごとの戻り値

項番

条件

戻り値または発生する例外 HTTP セッショ

ン 引数

1 − null null が返されます。

2 − URL として不

正なフォーマッ ト

java.lang.IllegalArgumentException 例外が発生します。

3 • リクエスト 処理中に新 規作成した HTTP セッ ションがあ る。

• URL 書き換 えでセッ ション ID が通知され ている。

空文字列 HTTP リクエストの URL のパスおよびクエリに対して,セッション ID を付加した値が返されます。※1

4 クエリから開始

されている URL(先頭文字 が「?」の場合)

HTTP リクエストの URL のパスに,セッション ID および引数に指定し た値が付加された値が返されます。※1

5 フラグメントか

ら開始されてい る URL(先頭文 字が「#」の場 合)

引数に指定した値が返されます。※2

6 現在の HTTP

セッションの セッション ID を表すパスパラ メタが含まれて いる URL

引数に指定した値が返されます。

7 リクエスト処理

中の Web アプ リケーション内 と判定される URL

引数にセッション ID を付加した値が返されます。

8 上記の条件以外 引数に指定した値が返されます。

(凡例)−:該当しない

この表で示す項番は,条件の優先度を示します。項番の数字が小さいほど,条件の優先度は高くなります。

注※1

引数の URL にパスが含まれないため,引数の URL にパスパラメタを直接付加できません。引数が空文字列やクエリ から始まる URL は,リクエストの URL のリソースを指している URL であるため,リクエストの URL にパスパラ メタを付加した値を使用して,URL 書き換えをします。

注※2

フラグメントだけの URL は,現在のリソース内の特定の個所を示す URL です。Web ブラウザでは,通常この URL を,表示されているコンテンツ内の移動を示すものとして扱います。このとき,サーバにリクエストは送信しませ ん。なお,これは,RFC3986 に従った動作です。

次に,URL 書き換えを使用してセッション ID を付加した URL の例について説明します。なお,ここで説 明する例は,次の前提条件に従っています。

前提条件

• Servlet API は,HTTP セッションの生成後に実行されたものとします。

• HTTP リクエストの URL は,「http://host1/gyoumu1/app1/index.jsp?type=1」です。

• コンテキストルート名は,「/gyoumu1」です。

URL 書き換えに使用する Servlet API の引数の指定値と書き換え後の戻り値(URL)の対応の例を次の表 に示します。

表 2‒33 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 属性が付与され ます。

また,ゲートウェイ指定機能でスキームを HTTPS と見なすように設定している場合に,Web コンテナが 生成したセッション ID を,HTTP Cookie によってクライアントに返すとき,その HTTP Cookie には Secure 属性が付与されます。

Outline

関連したドキュメント