Java HttpSessionListener-会话超时时会调用sessionDestroyed方法吗?
我有一个Java HttpSessionListener-会话超时时会调用sessionDestroyed方法吗?,java,session,servlets,jakarta-ee,session-timeout,Java,Session,Servlets,Jakarta Ee,Session Timeout,我有一个HttpSessionListener的实现,其中应用程序中的“锁定”资源通过sessionDestroyed方法释放 “锁”信息保存在数据库中,在大多数情况下,锁的释放工作正常。但在某些情况下,我仍然看到资源被锁定-即使没有活动的会话 所以,我怀疑是否有可能不调用sessionDestroyed?假设会话超时-是否调用sessionDestroyed方法 假设用户在不注销(破坏会话)的情况下关闭浏览器选项卡,那么会调用侦听器吗 提前谢谢 servlet引擎将处理会话超时。 它将自行确定
HttpSessionListener
的实现,其中应用程序中的“锁定”资源通过sessionDestroyed
方法释放
“锁”信息保存在数据库中,在大多数情况下,锁的释放工作正常。但在某些情况下,我仍然看到资源被锁定-即使没有活动的会话
所以,我怀疑是否有可能不调用sessionDestroyed
?假设会话超时-是否调用sessionDestroyed
方法
假设用户在不注销(破坏会话)的情况下关闭浏览器选项卡,那么会调用侦听器吗
提前谢谢 servlet引擎将处理会话超时。 它将自行确定会话何时不再有效,并调用
sessionDestroyed
。(这可能发生在用户关闭浏览器后的一段时间)
其他几点:
日志记录
也许您可以向sessionCreated和sessionDestroyed方法添加一些日志记录。对于创建的每个会话,您都应该有一个sessionDestroyed
例外处理
东西保持锁定的事实可能不是由于会话没有被破坏,而是由于sessionDestroyed逻辑中的错误。您是否有足够的异常处理/日志记录
定时
您是否等待了足够长的时间来检查锁定的资源?(关闭所有客户端,并考虑应用程序/服务器上配置的会话超时值)。如前所述,服务器无法检测到用户关闭浏览器,但它会维护其http会话列表,并在超时后销毁它们
所以,我怀疑sessionDestroyed是否有可能没有被调用?假设会话超时,会调用sessionDestroyed方法吗
对。会话超时或有人以编程方式(通过HttpSession.invalidate()
)使其过期时,会话将被销毁
假设用户在不注销(破坏会话)的情况下关闭浏览器选项卡,那么会调用侦听器吗
否,因为会话仍然有效。如果该用户再次打开网站,他/她的会话仍然有效
从HttpSession
:
通知在绑定方法完成后发送。对于无效或过期的会话,将在会话无效或过期后发送通知
谢谢你,迪瓦勒!异常处理成功了。我没有发现数据库异常。一旦异常得到处理,将测试应用程序并验证结果。