- Home ›
- サーブレット/JSP入門 ›
- セッション管理
セッションIDの確認
セッションが新規に開始された場合、セッションを区別するためにセッションIDが作成されクライアントにクッキーとして保存されます。ここではセッションIDを取得してみましょう。
セッションIDを取得するには「HttpSession」インターフェースで定義されている"getId"メソッドを使います。
getId public java.lang.String 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>
プログラムは下記の通りです。
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を保存するためで、セッション開始以降の次のリクエストの時からクッキーはサーバに対して送信されてきます。
では「再表示」をクリックして下さい。
セッション開始以降にリクエストがあった場合は、クライアント側に保存されたクッキーがサーバへ送信されてきます。この時、クッキーのクッキー名は「JSESSIONID」で保存されることが分かります。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。