【问题标题】:How to know when session is close如何知道会话何时关闭
【发布时间】:2017-05-06 00:04:35
【问题描述】:

我在 java 上有 webapp 和数据库。当用户登录时,我将数据库中的字段状态更改为授权。当有人尝试使用同一帐户登录时,它表示有人已经使用此帐户登录。这就是为什么我需要在会话关闭时将该状态字段更改为“not_authorized”(用户关闭浏览器)。我知道 ServletContextListener,但它们用于应用程序初始化和销毁​​。我需要同样的东西用于 Session。 Smth 像带有方法 SessionDestroyed 的会话侦听器。有没有办法做到这一点? TY很多

【问题讨论】:

  • “会话关闭”是否意味着注销?
  • 是的,有点像。
  • 你这样做的目的是什么?当用户同时在多个设备上登录时,应用程序是否会以某种方式中断?如果是这样,您可能想要修复该中断。
  • 可能你应该检查你的 web 框架选项,例如在 Spring Security 中默认的注销地址是'/logout',所以你可以使用像 ">注销。否则,如果您不打算使用 AJAX 轮询进行破解,则无法检测到使用普通 HTTP 关闭浏览器。然后你应该看看 WebSockets 的东西。

标签: java database session web listener


【解决方案1】:

为了回答您的问题,即使您关闭浏览器,会话仍将处于活动状态一段时间,会话超时后会话将失效。因此,当有人关闭浏览器时,您不会收到通知。您可以尝试使用网络套接字,在套接字处理程序关闭时,您可以编写逻辑来更新数据库。

尝试扩展 SessionListener 类,更多信息请点击链接http://www.groupkt.com/post/7ee95bbd/session-timeout-handling-in-java.htm

<webapp>
 <listeners>
    <listener-class> com.groupkt.example.AppHttpSessionListener</listener-class>
 </listeners>
</webapp>

【讨论】:

  • 我的意思是关闭浏览器不是重点。我需要在会话失效后更改该字段。
猜你喜欢
  • 2019-03-21
  • 2012-01-31
  • 2017-04-19
  • 2023-03-15
  • 2011-02-14
  • 2013-05-17
  • 1970-01-01
  • 2015-04-17
  • 2019-08-11
相关资源
最近更新 更多