2.7.1 セッション情報を管理するオブジェクト
ここでは,セッション情報の管理に使用するHttpSessionオブジェクトについて説明します。
(1) HttpSessionオブジェクトの管理方法
セッション情報は,Servlet APIで規定されているHttpSessionオブジェクトによって管理される情報です。
セッション情報の管理が開始されるのは,次の時点です。
-
サーブレットの場合は,HttpSessionオブジェクトを参照した時点。
-
JSPの場合は,ページへの参照が発生した時点(ただし,これはデフォルトの場合です)。
セッション情報の管理が開始されたあとで,同一のWebアプリケーション内のサーブレットに対して,同じブラウザプロセスからリクエストが送信されると,管理されている内容のHttpSessionオブジェクトがサーブレットに渡されるようになります。
ただし,実際にサーブレットに渡されるHttpSessionオブジェクトのインスタンスは,リクエスト単位に異なります。つまり,同一セッションに属する一連のリクエストでは,内容が同じでインスタンスが異なるHttpSessionオブジェクトが渡される場合があります。
このため,HttpSessionオブジェクトに対する操作では,次の点に留意してください。
-
HttpSessionオブジェクトにアクセスする場合,リクエスト単位にインスタンスを取得する必要があります。
-
HttpSessionオブジェクトへの参照を,複数のリクエストにわたってキャッシングしないでください。
-
HttpSessionオブジェクトに対して,javaのsynchronizedキーワードでロックを掛けても意味はありませんので,ロックは掛けないでください。
(2) HttpSessionオブジェクトの保存期間
HttpSessionオブジェクトは単一のJavaVM内にだけ保存されています。このため,サーブレットエンジンとして動作しているJavaVMプロセス(J2EEサーバ)に障害が発生した場合には,HttpSessionオブジェクトが保持しているセッション情報は失われます。
また,セッション情報は,正常・異常に関係なくJ2EEサーバが終了すると失われます。
J2EEサーバが終了したあとにもセッション情報を保持しておきたい場合は,アプリケーションサーバの機能であるセッションフェイルオーバ機能を使用してください。セッションフェイルオーバ機能については,マニュアル「アプリケーションサーバ 機能解説 拡張編」の「5. J2EEサーバ間のセッション情報の引き継ぎ」を参照してください。