たぶん、次のように推測してみてください:
possible_timeout = (CurrentTime - LastAccessedTime) >= MaxInactiveInterval。
// HttpServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Inside doGet(HttpServletRequest,HttpServletResponse)");
HttpSession session = request.getSession(true);
System.out.println("Session Id : " +session.getId() );
System.out.println( "Is New Session : " + session.isNew() );
int timeout = 10;
session.setMaxInactiveInterval(timeout);
System.out.println( "Max Inactive Interval : " + session.getMaxInactiveInterval() );
System.out.println("Exiting doGet(HttpServletRequest,HttpServletResponse)");
System.out.println();
}
// SessionEventListener
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("In sessionCreated(HttpSessionEvent) ");
HttpSession httpSession = httpSessionEvent.getSession();
System.out.println("Session Id :"+httpSession.getId() );
System.out.println("Exiting sessionCreated(HttpSessionEvent) ");
System.out.println();
}
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("In sessionDestroyed(HttpSessionEvent) ");
HttpSession httpSession = httpSessionEvent.getSession();
long createdTime = httpSession.getCreationTime();
long lastAccessedTime = httpSession.getLastAccessedTime();
int maxInactiveTime = httpSession.getMaxInactiveInterval();
long currentTime = System.currentTimeMillis();
System.out.println("Session Id :"+httpSession.getId() );
System.out.println("Created Time : " + createdTime);
System.out.println("Last Accessed Time : " + lastAccessedTime);
System.out.println("Current Time : " + currentTime);
boolean possibleSessionTimeout = (currentTime-lastAccessedTime) >= (maxInactiveTime*1000);
System.out.println("Possbile Timeout : " + possibleSessionTimeout);
System.out.println("Exiting sessionDestroyed(HttpSessionEvent)");
System.out.println();
}
出力は次のとおりです。
Inside doGet(HttpServletRequest,HttpServletResponse)
In sessionCreated(HttpSessionEvent)
Session Id :39F84968757E85ED89E7565639322F1F
Exiting sessionCreated(HttpSessionEvent)
Session Id : 39F84968757E85ED89E7565639322F1F
Is New Session : true
Max Inactive Interval : 10
Exiting doGet(HttpServletRequest,HttpServletResponse)
In sessionDestroyed(HttpSessionEvent)
Session Id :39F84968757E85ED89E7565639322F1F
Created Time : 1383729761582
Last Accessed Time : 1383729761587
Current Time : 1383729815839
Possbile Timeout : true
Exiting sessionDestroyed(HttpSessionEvent)
タイムアウトがすぐに検出されるとは限らないことがわかりました。セッションのタイムアウトを定期的にチェックするスレッドがあるようです。また、リクエストごとにチェックが行われます。