如何检查现有会话是否无效?

时间:2013-06-19 05:57:41

标签: java session

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

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();
}

2 个答案:

答案 0 :(得分:12)

尝试将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。

答案 1 :(得分:10)

如果session is already invalidated

HttpSession session = request.getSession(false);IllegalStateException

boolean invalidated = false;
try {
    request.getSession(false);
} catch(IllegalStateException ex) {
    invalidated = true;
}