【问题标题】:How to check existing session is invalidated or not?如何检查现有会话是否无效?
【发布时间】:2021-03-08 22:20:33
【问题描述】:

如何检查现有会话是否无效? 在以下 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();
}

【问题讨论】:

  • 如果你没有请求,“会话”对你意味着什么?您是在谈论像 Tomcat 这样的应用程序容器上下文吗?或者这个会话是你写的?

标签: java session


【解决方案1】:

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

【讨论】:

  • 我这里没有要求。地图 appMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap(); Map userSessionMap = (Map) appMap.get("USERS");
  • request.getSession(true) 等价于request.getSession()
【解决方案2】:

HttpSession session = request.getSession(false); 将给出IllegalStateException 如果session is already invalidated

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

【讨论】:

    猜你喜欢
    • 2010-10-12
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多