如果有人没有注销,但他的会话过期,问题就出现了。 。比起我没有
可能性,以检查他是否在仍处于登录你必须通过实施的可能性HttpSessionListener
:
@WebListener
public class YourUserSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
// NOOP.
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
YourUser yourUser = event.getSession().getAttribute("yourUser");
if (yourUser != null) {
yourUser.logout(); // Update DB.
}
}
}
哪里YourUser
是你的会话范围JSF管理的bean代表登录在用户。
或者,当你在JSF2(你的问题的历史证明),把@PreDestroy
在会话中注销方法范围的JSF管理的bean代表登录的用户:
@ManagedBean
@SessionScoped
public class YourUser {
// ...
@PreDestroy
public void logout() {
// Update DB.
}
}
这样的方法将在bean在会话到期之前被销毁之前调用。
为什么不在成员数据库中为联机创建布尔字段,并且当他们的会话过期时将其设置为false? – 2011-12-19 20:37:04
这是我一直在考虑的事情,但我不知道如何检查某人会话是否已过期,或者如何将变量变量平行地更改为过期。 – xwhyz 2011-12-19 20:45:44