サーブレット 4章 クッキーとセッション
- 4.1. クッキー
- 4.2. セッション
- 4.3. セッションの終了
- 4.4. クッキーを用いないセッションIDの管理
4.3. セッションの終了
前節でセッションの開始については解りましたが、終了はどのように行うのでしょうか。HttpSessionの「invalidate」メソッドを呼び出す事により、該当セッションを無効化することができます。このメソッドが呼び出された後、無効化されたHttpSessionオブジェクトにアクセスしようとすると「IllegalStateException」が発生します。
public final class SessionTerminateServlet extends HttpServlet{ protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ HttpSession session=request.getSession(false); session.invalidate(); ... } }
しかし全てのユーザがセッションを終了するサーブレットを呼び出してくれるとは限りません。そこでサーブレットには、セッションの有効期限が設定されており、一定時間が過ぎるとタイムアウトになる仕組みが提供されています。有効期限の設定は、「WEB-INF/web.xml」ファイルで行います。
<session-config> <session-timeout>30</session-timeout> </session-config>
<session-timeout>タグの中に分単位で有効期限を設定します。例の場合は30分です。また<session-config>タグは<servlet>、<servlet-mapping>タグに続いて記述します。
この値をプログラムで制御する場合には、HttpSessionクラスの「setMaxInactiveInterval」(設定)「getMaxInactiveInterval」(取得)を使用します。ただ<session-config>タグと異なり、秒単位で値の指定を行います。またマイナスの値を指定すると、セッションの有効期限が無限(タイムアウトを起こさない)になります。その場合は確実にセッションを無効化する仕組みが必要になってくるので、その使用には注意が必要です。
(実習課題3)
実習課題2のプログラムを改良しなさい。
- セッションの有効期限を1分とする。「WEB-INF/web.xml」で設定を行う事。
タイムアウト後にどのような挙動になるか確かめる事。