Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet Tomcat

JSP Servletでセッションの有効期限を設定する方法

投稿日:2021年5月22日 更新日:

<目次>

(1) JSP Servletでセッションの有効期限を設定する方法
 (1-1) セッションの有効期限設定の概要
 (1-2) 方法1:web.xmlに追記する方法
 (1-3) 方法2:プログラム内で指定する方法

(1) JSP Servletでセッションの有効期限を設定する方法

(1-1) セッションの有効期限設定の概要

セッションタイムアウトは様々な階層(単位)で設定する事ができ、要件に応じて柔軟に設定する事が可能です。
 
(表1)
セッション管理単位 内容
①アプリケーションサーバ単位 最上位の設定単位です。

TomcatやIIS等のアプリケーションサーバ単位にて、デフォルトのセッションのタイムアウト時間を指定しています。

②アプリケーション単位 ①と③の間の設定単位です。

アプリケーション(JSP/Servletの場合は「動的WebProject」単位)に対して生成される全てのセッションに適用されるタイムアウト時間を設定できます。

「web.xml」にて設定を行います(⇒「方法1」にて解説)

③セッション単位 最下位の設定単位です。

HttpSessionインターフェイス(Servlet API)のsetMaxInactiveInterval()メソッドを使って、プログラム中でもセッションタイムアウト時間を個別に変更する事ができます。

このメソッドが実行された特定のセッションに対して、指定したタイムアウト時間が個別に設定されます。

Servlet等にて設定を行います(⇒「方法2」にて解説)

 

目次にもどる

(1-2) 方法1:web.xmlに追記する方法

(表1)の②に相当する方法で、「WEB-INF」配下の「web.xml」に次の記述を行う事で、セッションタイムアウトを実現できます。

(構文)

<?xml version="1.0" encoding="UTF-8"?>
<web-app ..[中略] ..>
   
  <!-- 中略 -->
   
  <session-config>
    <session-timeout>10</session-timeout>
  </session-config>
   
  <!-- 中略 -->
   
</web-app>

 

(構文説明)
<session-config>タグでセットする値はInteger型で、セッションタイムアウトまでの時間を単位「分」で指定します。ここで設定した値は、このアプリにおいて生成される全てのセッションに対して有効となります。0以下を指定した場合は、コンテナのデフォルト設定が適用されます。

(図111)web.xmlの設定例

(補足)もしweb.xmlが無い場合
もしご自身のアプリケーションにweb.xmlが無い場合は、新しくWEB-INF配下に作成する必要があります。
 
(図112)作成する階層(WEB-INF配下)
 

WEB-INFフォルダで右クリック⇒New⇒Otherと選択すると、次のNew画面が出るので「XML File」と検索すると出てきます。

(図113)web.xmlの新規作成

以下、web.xml全体のコードのサンプルをご紹介します。今回のセッションタイムアウトに関連する部分「以外」は全てFORM認証に必要となる記述で、セッションタイムアウトがちゃんと動作しているか?を確認するため、タイムアウト時間(1分)経過後に再度画面をロードすると、再度ログイン画面に遷移する事を以て検証します。
 
このFORM認証の内容は今回の対象外のため深くは触れませんが、ご興味ある方は下記の別記事もご覧ください。
 
 
(コードのサンプル)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Form Auth</web-resource-name>
      <url-pattern>/form_auth/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin-gui</role-name>
      <role-name>manager-gui</role-name>
    </auth-constraint>
  </security-constraint>

  <login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
      <form-login-page>/Login1.jsp</form-login-page>
      <form-error-page>/LoginError1.jsp</form-error-page>
    </form-login-config>
  </login-config>

  <security-role>
    <role-name>admin-gui</role-name>
  </security-role>
  <security-role>
    <role-name>manager-gui</role-name>
  </security-role>

  <!-- 今回追記する内容 -->
  <session-config>
    <session-timeout>1</session-timeout>
  </session-config>
</web-app>

 

<session-timeout>で1分を設定した状態で、実際に画面にアクセスして確認しています。
①最初に「F5」で画面が再読み込みされる事を確認
②1分間放置
③再度「F5」でセッションが切れる事を確認

 

目次にもどる

(1-3) 方法2:プログラム内で指定する方法

(表1)の③に該当する方法で、プログラム中にて「setMaxInactiveInterval()」メソッドを使う事によって、セッション単位に時間を指定する事ができます(個別セッション毎にこのメソッドを使い、アプリケーションの設定時間を上書きする)。メソッドの引数にはセッションタイムアウト時間を「秒」単位で指定します。
 
(構文)
Session.setMaxInactiveInterval([秒数]);
 
(例:JSPの場合)10分=600秒
JSPの場合はHttpSessionのインスタンスは暗黙オブジェクトとして利用出来るため、いきなり「session.setMaxInactiveInterval(600);」と記述する事ができます。

<%
session.setMaxInactiveInterval(600);
%>

 

(例:Servletの場合)10分=600秒

HttpSession session = request.getSession();
Session.setMaxInactiveInterval(600);
 
この「setMaxInactiveInterval()」メソッドを通過した特定のセッションにのみ、適用されるため小回りが利く設定になります。
 
(図121)JSPプログラムの例

(動画)
<session-timeout>で1分を設定した状態で、実際に画面にアクセスして確認しています。
①最初に「F5」で画面が再読み込みされる事を確認
②15秒間放置
③再度「F5」でセッションが切れる事を確認
 
 

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet, Tomcat

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

TwitterAPIのJavaでの使い方をご紹介~【入門編】Twitter4j導入~ハッシュタグでツイート検索するまで~

<目次> (1) TwitterAPIのJavaでの使い方をご紹介  (1-1) STEP0:前提条件  (1-2) STEP1:ライブラリ(jar)のダウンロード  (1-3) STEP2:アプリケ …

TwitterのAPIライブラリ(Twitter4j)でフォローを行う方法

<目次> (1) TwitterのAPIライブラリ(Twitter4j)でフォローを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) TwitterのAPIライブラリ(Twitt …

JDBCドライバとは?概要や使い方をご紹介

<目次> (1) JDBCドライバとは?概要や使い方をご紹介  (1-1) JDBC及びJDBCドライバとは?   (1-1) JDBC API   (1-2) JDBCドライバマネージャー   (1 …

「サーブレットコンテナ」や「サーブレットのライフサイクル」とは?(サンプルプログラム付)

※本記事は「サーブレットとは?その役割やHelloWorldサンプルコードのご紹介」の続編です。 (0)目次&概説 (2) サーブレットコンテナの基本  (2-1) サーブレットコンテナとは?  (2 …

Javaのthisとは?コンストラクタで引数を与えている場合・メソッド引数に使われる場合もご紹介

<目次> (1) Javaのthisとは?コンストラクタに出現する場合やメソッド引数に使われる場合もご紹介  (1-1) thisとは?  (1-2) 用途1:自分自身を指定【重要】  (1-3) 用 …

  • English (United States)
  • 日本語
Top