如果有人沒有註銷,但他的會話過期,問題就出現了。 。比起我沒有
可能性,以檢查他是否在仍處於登錄你必須通過實施的可能性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