Section4: セッション管理

HttpSessionのAPI
シグネチャ 説明
セッションスコープ関連(4種)
public Object getAttribute(String name) 指定された名前の属性値を返す。対応する属性がなければnullを返す。
public Enumeration getAttributeNames() すべての属性名の列挙を返す。
public void setAttribute(String name, Object value) このセッションに属性をセットする。
public void removeAttribute(String name) このセッションから属性を削除する。
セッション情報取得関連(5種)
public String getId() セッションIDを返す。
public long getCreationTime() セッションが生成された時刻をエポックミリ秒(1970年1月1日0時を起点としたミリ秒)で返す。
public boolean isNew() クライアントがまだこのセッションを使用していない場合、trueを返す。
public long getLastAccessedTime() 最後にクライアントがこのセッションに関するリクエスト送信した時刻をエポックミリ秒(1970年1月1日0時を起点としたミリ秒)で返す。
public ServletContext getServletContext() このセッションに関連しているServletContextを返す。
セッションの無効化関連(3種)
public void invalidate() このセッションを無効化する。無効化されたセッションのgetCreationTime(), getLastAccessedTime(), セッションスコープ関連のメソッド, isNew(), invalidate()を呼び出すとIllegalStateException。
public void setMaxInactiveInterval(int interval) このセッションの保持期間(最終アクセスからセッションが無効化されるまでの時間)を秒で設定する。負の整数が設定された場合、このセッションはタイムアウトしない。
public int getMaxInactiveInterval() このセッションの保持期間(最終アクセスからセッションが無効化されるまでの時間)を秒で返す。
  • セッションタイムアウトを一律で設定する場合は、web.xmlのsession-configタグの子要素であるsession-timeoutタグを使用する。
  • セッションごと個別にタイムアウトを設定したい場合はsetMaxInactiveIntervalメソッドを使用して上書きする。
  • session-timeoutタグの設定値は「分」であり、setMaxInactiveIntervalの引数は「秒」なので注意すること。
  • Tomcat6.0では、session-timeoutタグを指定しない場合のデフォルトタイムアウト値は30分となっている。
セッションIDの受け渡し方法
方法説明
Cookieクライアント側にCookie情報としてセッションIDを格納する。Cookieをサポートしないブラウザでは利用不可
URL Rewritingサーバがレスポンスとして返すHTML内のリンクのURL末尾にセッションIDを付加する。例: http://localhost:8080/sampleApp/SampleServlet/test/;jsessionid=2E772FADBA20D4D44FFDE1E97212EC45
URL Rewritingのためのメソッド
定義クラスメソッドシグネチャ説明
HttpServletResponsepublic String encodeURL(String url)URL Rewritingが必要な場合(クライアントがCookieをサポートしていない、など)、URLにセッションIDを付加して返す。URL Rewritingが必要でない場合は、引数をそのまま返す。
HttpServletResponsepublic String encodeRedirectURL(String url)リダイレクト用のURLに対してURL Rewritingが必要な場合にはこのメソッドを使用する。
  • encodeURLとencodeRedirectURLの2種類が用意されているのは、セッションIDを付加するかどうかの判定基準がリダイレクトかどうかで違う(可能性がある)ためらしい。
  • Tomcat6.0の実装では、引数のURLが空文字のときのみ動作が異なっていた。ブラウザがCookieをサポートしない場合に引数に空文字を渡すと、encodeURLではサーブレットコンテキストのパスまで指定されたURLにセッションIDが付加されたものが返ってきたのに対し、encodeRedirectURLでは空文字がそのまま返ってきた。
  • 世の中でもこの2つのメソッドの違いはあまりはっきりしていないらしい。(あまり深く考えず、リダイレクト用URLを出力するときにはencodeRedirectURLを使用するという方向にとりあえず従っておけば問題ないと思われる)
inserted by FC2 system