セッションIDの確認

広告

セッションが新規に開始された場合、セッションを区別するためにセッションIDが作成されクライアントにクッキーとして保存されます。ここではセッションIDを取得してみましょう。

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

Returns a string containing the unique identifier assigned to this 
session. The identifier is assigned by the servlet container and is
implementation dependent. 

Returns:
  a string specifying the identifier assigned to this session 
Throws: 
  java.lang.IllegalStateException - if this method is called on an
    invalidated session

セッションIDは、(クライアントがクッキーを有効にしている場合には)クライアントにクッキーの値として保存されます。下記のサンプルではセッションIDを確認すると同時に、クライアント側に保存されているクッキーを確認してみます(正確にはクライアント側からサーバへリクエストがある時に、合わせてクライアントからサーバに送られてくるクッキーを確認します)。

サンプルプログラム

では試してみます。

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>SessionTest7</servlet-class>
  </servlet>

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

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

SessionTest7.java

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

public class SessionTest7 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);
    }

    String session_id = session.getId();

    out.println("<p>");
    out.println("セッションIDは" + session_id + "です<br>");
    out.println("</p>");

    Cookie cookie[] = request.getCookies();

    out.println("<p>");
    if (cookie != null){
      out.println("クライアントから送信されたクッキーを表示します<br>");
      for (int i = 0 ; i < cookie.length ; i++){
        out.println(cookie[i].getName() + " = " + cookie[i].getValue() + "<br>");
      }
    }else{
      out.println("クッキーはクライアントから送信されていません<br>");
    }
    out.println("</p>");

    out.println("<a href=¥"/session/sessiontest¥">再表示</a>");

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

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

セッションIDとクッキー

セッションIDは取得できますが、クッキーは現時点ではありません。これはセッション開始後にクライアントに対してクッキーを用いてセッションIDを保存するためで、セッション開始以降の次のリクエストの時からクッキーはサーバに対して送信されてきます。

では「再表示」をクリックして下さい。

セッションIDとクッキー

セッション開始以降にリクエストがあった場合は、クライアント側に保存されたクッキーがサーバへ送信されてきます。この時、クッキーのクッキー名は「JSESSIONID」で保存されることが分かります。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)