セッションの破棄

広告

今度は既に開始されているセッションを破棄してみます。

セッションを破棄するには「HttpSession」インターフェースで定義されている"invalidate"メソッドを使います。

Invalidates this session then unbinds any objects bound to it. 

Throws: 
  java.lang.IllegalStateException - if this method is called on an 
    already invalidated session

例えば下記のように記述します。

public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws IOException, ServletException{

  response.setContentType("text/html; charset=Shift_JIS");
  PrintWriter out = response.getWriter();

  HttpSession session = request.getSession(true);

  session.invalidate();
}

サンプルプログラム

では簡単に試してみます。

web.xmlファイルは下記のようにしました。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>sessiontest</servlet-name>
    <servlet-class>SessionTest3</servlet-class>
  </servlet>

  <servlet>
    <servlet-name>invalidatesession</servlet-name>
    <servlet-class>InvalidateSession3</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>sessiontest</servlet-name>
    <url-pattern>/sessiontest</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>invalidatesession</servlet-name>
    <url-pattern>/invalidatesession</url-pattern>
  </servlet-mapping>
</web-app>

プログラムは下記の通りです。

SessionTest3.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Enumeration;

public class SessionTest3 extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();

    HttpSession session = request.getSession(false);

    out.println("<html>");
    out.println("<head>");
    out.println("<title>セッションテスト</title>");
    out.println("</head>");
    out.println("<body>");

    if (session == null){
      out.println("<p>セッション開始します</p>");
      session = request.getSession(true);
    }

    out.println("<a href=\"/session/invalidatesession\">セッションを破棄</a>");

    out.println("</body>");
    out.println("</html>");
  }
}

InvalidateSession3.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Enumeration;

public class InvalidateSession3 extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();

    HttpSession session = request.getSession(false);

    out.println("<html>");
    out.println("<head>");
    out.println("<title>セッションテスト</title>");
    out.println("</head>");
    out.println("<body>");

    if (session != null){
      out.println("<p>セッションは開始されています</p>");

      out.println("<p>セッションを破棄し確認します。</p>");
      session.invalidate();

      session = request.getSession(false);

      if (session == null){
        out.println("<p>セッションは破棄されました</p>");
      }else{
        out.println("<p>セッションが残っています</p>");
      }
    }else{
      out.println("<p>セッションがありません</p>");
    }

    out.println("</body>");
    out.println("</html>");
  }
}

上記をコンパイル後に「d:\servlet-sample\session\WEB-INF\classes\」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/session/sessiontest」へアクセスしてみます。

セッションの破棄

まずセッションを開始します。次に「セッションの破棄」をクリックして下さい。

セッションの破棄

まずセッションの有無を確認した上でセッションを破棄します。そしてセッションが開始されているかどうかを再度確認して表示しています。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。