Sli*_*ick 6 java session servlets session-timeout java-ee
我有一个实现,HttpSessionListener使用sessionDestroyed方法释放应用程序中的"锁定"资源.
"锁定"信息在数据库中维护,并且在大多数情况下锁的发布工作正常.但在某些情况下,我仍然看到资源被锁定 - 即使没有活动的会话!
所以,我怀疑是否有可能sessionDestroyed不被调用?假设会话超时 - 是否sessionDestroyed会调用方法?
假设用户关闭浏览器选项卡而不注销(销毁会话) - 那么是否会调用侦听器?
提前致谢!
Servlet 引擎将处理会话超时。它将自行确定会话何时不再有效,并调用sessionDestroyed. (这可能会在用户关闭浏览器后一段时间发生)。
其他一些要点:
记录
也许您可以向 sessionCreated 和 sessionDestroyed 方法添加一些日志记录。对于每个 sessionCreated ,您应该有一个 sessionDestroyed 。
异常处理
也许东西保持锁定的事实并不是由于会话没有被销毁,而是可能由于您的 sessionDestroyed 逻辑中出现错误。您是否有足够的异常处理/日志记录?
定时
您是否等待了足够长的时间来检查锁定的资源?(关闭所有客户端,并考虑应用程序/服务器上配置的会话超时值)。如前所述,服务器无法检测到用户关闭浏览器,但它确实维护其 http 会话列表,并会在超时后销毁它们。