- 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 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。