- Home ›
- サーブレット/JSP入門 ›
- セッション管理
セッションの有効期限
セッションの有効期限を設定してみます。まずデフォルトの有効期限を確認してみましょう。
セッションの有効期限を取得するには「HttpSession」インターフェースで定義されている"getMaxInactiveInterval"メソッドを使います。
getMaxInactiveInterval public int getMaxInactiveInterval()
Returns the maximum time interval, in seconds, that the servlet container will keep this session open between client accesses. After this interval, the servlet container will invalidate the session. The maximum time interval can be set with the setMaxInactiveInterval method. A negative time indicates the session should never timeout. Returns: an integer specifying the number of seconds this session remains open between client requests
取得した値はint型の値となっており単位は秒数です。
サンプルプログラム
では試してみます。
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>SessionTest5</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 SessionTest5 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); } int intervalTime = session.getMaxInactiveInterval(); out.println("<p>"); out.println("デフォルトの有効期限は" + intervalTime + "秒です<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」へアクセスしてみます。
以上のようにデフォルトのセッションの有効期限は1800秒(30分)となっています。
<session-config>要素による有効期限の設定
次に有効期限を設定してます。全てのセッションのデフォルトの有効期限を設定するには、web.xmlにて<session-config>要素を使って指定します。
下記のように定義されています。
<xsd:complexType name="session-configType"> <xsd:sequence> <xsd:element name="session-timeout" type="j2ee:xsdIntegerType" minOccurs="0"> </xsd:element> </xsd:sequence> </xsd:complexType>
子要素として<session-timeout>要素を0回または1回指定します。<session-timeout>要素には有効期限を分数で指定します。(秒ではなく分ですので注意してください)。
<web-app> <session-config> <session-timeout> 有効期限の分数 </session-timeout> </session-config> </web-app>
デフォルトのセッションの有効期限ではなく、個別のセッションに対する有効期限を設定するには「HttpSession」インターフェースで定義されている"setMaxInactiveInterval"メソッドを使います。
setMaxInactiveInterval public void setMaxInactiveInterval(int interval)
Specifies the time, in seconds, between client requests before the servlet container will invalidate this session. A negative time indicates the session should never timeout. Parameters: interval - An integer specifying the number of seconds
サンプルプログラム
では試してみます。
web.xmlファイルは下記のようにしました。セッションのデフォルトの有効期限を3分にしています。
<?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>SessionTest6</servlet-class> </servlet> <servlet> <servlet-name>setinterval</servlet-name> <servlet-class>SetInterval6</servlet-class> </servlet> <servlet-mapping> <servlet-name>sessiontest</servlet-name> <url-pattern>/sessiontest</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>setinterval</servlet-name> <url-pattern>/setinterval</url-pattern> </servlet-mapping> <session-config> <session-timeout>3</session-timeout> </session-config> </web-app>
プログラムは下記の通りです。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Date; public class SessionTest6 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); } int intervalTime = session.getMaxInactiveInterval(); out.println("<p>"); out.println("現在のデフォルトの有効期限は" + intervalTime + "秒です<br>"); out.println("</p>"); out.println("<a href=\"/session/setinterval\">有効期限を20秒へ</a>"); out.println("</body>"); out.println("</html>"); } }
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Date; public class SetInterval6 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>"); }else{ session.setMaxInactiveInterval(20); int intervalTime = session.getMaxInactiveInterval(); out.println("<p>"); out.println("現在のセッションの有効期限は" + intervalTime + "秒です<br>"); out.println("</p>"); } out.println("</body>"); out.println("</html>"); } }
上記をコンパイル後に「d:\servlet-sample\session\WEB-INF\classes\」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/session/sessiontest」へアクセスしてみます。
セッションの有効期限がweb.xmlで設定した3分(180秒)に変更されています。次に「有効期限を20秒へ」をクリックして下さい。
特定のセッションの有効期限も変更することが出来ました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。