This question already has answers here:
How to call sessionDestroyed when a session times out
(4个答案)
3年前关闭。
我有一个
“锁”信息在数据库中维护,并且在大多数情况下,锁的释放都可以正常工作。但是在某些情况下,我仍然看到资源被锁定-即使没有 session 处于 Activity 状态!
因此,我怀疑是否有可能无法调用
假设用户关闭浏览器选项卡而不注销(销毁 session ),那么将调用侦听器吗?
提前致谢!
(4个答案)
3年前关闭。
我有一个
HttpSessionListener
的实现,其中应用程序中的“锁定”资源是使用sessionDestroyed
方法释放的。“锁”信息在数据库中维护,并且在大多数情况下,锁的释放都可以正常工作。但是在某些情况下,我仍然看到资源被锁定-即使没有 session 处于 Activity 状态!
因此,我怀疑是否有可能无法调用
sessionDestroyed
?假设 session 超时-将调用sessionDestroyed
方法吗?假设用户关闭浏览器选项卡而不注销(销毁 session ),那么将调用侦听器吗?
提前致谢!
最佳答案
Servlet引擎将处理 session 超时。
当 session 不再有效时,它将自行确定,并将调用sessionDestroyed
。 (这可能在用户关闭浏览器后的一段时间内发生)。
其他一些要点:
正在记录
也许您可以向sessionCreated和sessionDestroyed方法添加一些日志记录。对于每个sessionCreated,您都应该有一个sessionDestroyed。
异常(exception)处理
东西仍然被锁定的事实可能不是由于 session 没有被销毁,而是由于sessionDestroyed逻辑中的错误。您在那里是否有足够的异常处理/日志记录?
时间
您是否等待了足够长的时间来检查锁定的资源? (关闭所有客户端,并考虑在应用程序/服务器上配置的 session 超时值)。如前所述,服务器无法检测到用户正在关闭浏览器,但是它会维护其HTTP session 列表,并且在超时后会销毁它们。
07-26 06:00