適当なタイトルですが、、、
セッションのタイムアウト時間はいつリセット(数え直し)されるのか気になったので実験してみました。
こんな感じのソースコードです。
SessionTestServlet
package com.sample.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/SessionTestServlet")
public class SessionTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>セッションテスト</title>");
out.println("</head>");
out.println("<body>");
HttpSession session = request.getSession(false);
if(session == null){
out.println("セッションはありません。セッションを新しく作成します。<br>");
session = request.getSession(true);
}
out.println("セッションタイムアウト:"+session.getMaxInactiveInterval()+"<br>");
out.println("<a href=\"./SessionTestServlet\">再読み込み</a><br>");
out.println("</body>");
out.println("</html>");
}
}
セッションタイムアウト時間はweb.xmlに下記を追加して3分に変更しておきます。
web.xml
<web-app ...>
...
<session-config>
<session-timeout>3</session-timeout>
</session-config>
</web-app>
結果としては、何らかのリクエストがある度にセッションのタイムアウト時間はリセットされるようです。
セッションオブジェクトに(コード上は)一切アクセスしないようなHTMLやサーブレットにリクエストがあってもセッションのタイムアウト時間はリセットされます。
ブラウザからセッションIDを含むクッキーが渡されるので、それによりセッションのタイムアウト時間がリセットされると考えるのが正確かもしれません。