java - HttpSessionListener - session 超时时会调用 sessionDestroyed 方法吗?

标签 java session servlets jakarta-ee session-timeout

<分区>

我有一个 HttpSessionListener 的实现,其中应用程序中的“锁定”资源使用 sessionDestroyed 方法释放。

“锁定”信息保存在数据库中,在大多数情况下,锁定的释放工作正常。但在某些情况下,我仍然看到资源被锁定 - 即使没有 Activity session !

所以,我怀疑是否有可能 sessionDestroyed 没有被调用?假设 session 超时 - sessionDestroyed 方法会被调用吗?

假设用户在没有注销的情况下关闭浏览器选项卡(破坏 session )-那么是否会调用监听器?

提前致谢!

最佳答案

servlet 引擎将处理 session 超时。 它将自行确定 session 何时不再有效,并将调用 sessionDestroyed。 (这可能会在用户关闭浏览器一段时间后发生)。

其他几点:

记录

也许您可以向 sessionCreated 和 sessionDestroyed 方法添加一些日志记录。对于每个 sessionCreated 你应该有一个 sessionDestroyed。

异常处理

也许东西保持锁定的事实不是由于 session 没有被销毁,而是由于您的 sessionDestroyed 逻辑中的错误。您是否有足够的异常处理/日志记录?

时间

您是否等待了足够长的时间来检查您锁定的资源? (关闭所有客户端,并考虑应用程序/服务器上配置的 session 超时值)。如前所述,服务器无法检测到用户关闭浏览器,但它会维护其 http session 列表,并会在超时后销毁它们。

关于java - HttpSessionListener - session 超时时会调用 sessionDestroyed 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6452757/

相关文章:

apache - 为什么当 session.cookie_lifetime=0 时 session 不会在浏览器关闭时过期?

除 tomcat 之外的 Java Web 服务

java - 如何使用 Java 中的 REST API 对 Sharepoint 2016 进行身份验证?

java - 使用 REST 服务上传文件

PHP - 为什么我不能删除这个 session ID cookie?

java - 使 session 无效和 request.getsession(true) 后 JSession ID 保持不变

java - HttpSession 对象如何绑定(bind)到浏览器?

java - OpenCV 无法打开视频 Windows 8.1

java - 从 JMock 的对象返回 ImmutableSet 导致 UndeclaredThrowableException

php - 这是一个真正的挑战 : why does PHP call shutdown function before sessions are written?