0

我有一个名为WorkSession. 创建此 bean 的实例时,我调用初始化函数(用@PostConstruct注释声明),它将数据库中的当前用户(我使用 JASS 处理用户日志记录)状态更改为ONLINE.

我想在用户注销时做类似的事情(将用户状态更改为OFFLINE)。当用户按下网页上的“注销”按钮时,很容易做到这一点。问题是我不知道如何检测关闭的浏览器或浏览器中的标签。

我看到带有注释的方法@PreDestroy对此不起作用,因为它是由应用程序服务器垃圾收集器调用的,对吗?

我使用 Glassfish 3.1.2、JPA 2,0 和 JSF 2.0。

4

1 回答 1

1

我看到带有注释的方法@PreDestroy对此不起作用,因为它是由应用程序服务器垃圾收集器调用的,对吗?

它应该工作得很好。GC 绝对不会调用它。它在会话被销毁时由容器调用。也许您的具体问题是您希望当用户关闭整个浏览器时会话立即被销毁。因此这是不正确的。它只有在服务器端超时时才会被销毁。默认超时为 30 分钟。因此,如果您等待 30 分钟,那么会话将被销毁,并且@PreDestroy将调用所有会话(和视图)范围的 bean。

<session-config><session-timeout>您可以通过in配置默认超时web.xml

也可以看看:


顺便说一句,“会话断开”一词在 Web 开发世界中完全没有意义。

于 2012-04-22T21:36:57.440 回答