6

如何检查现有会话是否无效?在以下 loginBean 代码中,我检查了用户是否已登录的每次登录。如果其他系统已登录,请停用该会话并创建新会话。如果该会话因超时而失效,则下次 userSessionMap 包含 usedname 和错误以使其失效。那么如何检查它是否无效?

Map appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
Map<String, HttpSession> userSessionMap = (Map<String, HttpSession>) appMap.get("USERS");

if (userSessionMap.containsKey(getUsername())) {
log.info(getUsername() + " already loggedin. Closing existing sesssion");
HttpSession sess = userSessionMap.get(getUsername());
sess.invalidate();
}
4

2 回答 2

13

尝试false作为参数传递给getSession(boolean)。如果会话存在,这将返回一个会话,否则它将返回null

HttpSession session = request.getSession(false);
if (session == null || !request.isRequestedSessionIdValid()) {
    //comes here when session is invalid.        
}

返回与此请求关联的当前 HttpSession,或者,如果没有当前会话并且 create 为 true,则返回一个新会话。如果 create 为false并且请求没有有效的 HttpSession,则此方法返回null。

于 2013-06-19T05:58:47.330 回答
12

HttpSession session = request.getSession(false);IllegalStateException如果会话已经失效,将给出

boolean invalidated = false;
try {
    request.getSession(false);
} catch(IllegalStateException ex) {
    invalidated = true;
}
于 2013-06-19T06:02:00.523 回答