会话超时时如何调用sessionDestroyed

meb*_*ada 3 java servlets session-timeout

我是 JSP 新手。我在一个类中使用了以下代码,该代码实现了HttpSessionListener在会话超时时获取 SESSION OUT:

    public void sessionCreated(HttpSessionEvent arg0) {  
        System.out.print("SESSION Created");
    }

    public void sessionDestroyed(HttpSessionEvent arg0) {
        System.out.print("SESSION OUT");
    }
Run Code Online (Sandbox Code Playgroud)

我设置web.xml

  <session-config>
     <session-timeout>1</session-timeout> 
  </session-config>
Run Code Online (Sandbox Code Playgroud)

servlet 等待两分钟多,然后调用sessionDestroyed.

有没有办法强制sessionDestroyed超时?

提前致谢。

And*_*yle 5

是什么让您认为会话超时时没有被sessionDestroyed调用或者换句话说,您对它被调用的事实有何解释?

Servlet 将以自己的方式处理会话的有效性,包括会话超时,并且当它确定会话不再有效时,它将调用您的方法。然而,我认为任何 servlet 都不能保证这方面的任何特定的及时性;我的理解是,它有点像垃圾收集,因为它保证在某个时刻发生,但不一定在会话有资格销毁的最早可能的情况下发生。

在任何情况下,似乎几乎可以肯定 servlet 正在执行您想要的操作 - 看到会话超时并调用适当的方法 - 唯一的问题是您是否会在最后一个请求后 60 秒或稍后。我建议,一般来说,您不应该依赖调用此方法的确切时间;当然,可以使用它来清理资源,但不能用于程序正确性之类的目的(无论如何,IllegalStateExceptions如果在无效会话上调用方法,您都会得到这样的结果)。如果您觉得确实必须依靠这一点,也许可以解释一下您正在做什么,以便其他人可以提出更合适的方法来实现这一目标。