如何检查现有会话是否无效? 在以下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();
}
答案 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)
HttpSession session = request.getSession(false);
会IllegalStateException
boolean invalidated = false;
try {
request.getSession(false);
} catch(IllegalStateException ex) {
invalidated = true;
}