java httpsession有效吗?

Mat*_*teo 4 java servlets httpsession

我在tomcat中使用java servlet.我在哈希表中保存用户名和带有属性usrname的httpsession我想知道是否有办法知道httpsession是否有效.

我试过了:

try{
    String user = httpSession.getAttribute("username")
    return "is valid";
}catch(IllegalStateException e){
    return "is not valid";
}
Run Code Online (Sandbox Code Playgroud)

得到答案的答案,但如果我不认为"已登录"的用户从一个地方连接起来怎么办?如果我只控制我创建一个新的会话,我不知道他是否连接另一个会话.

Sea*_*ean 10

无需将httpSession存储在您自己的哈希中.

查看HttpServletRequest的api .如果您查看getSession(布尔值x)(传递false以便它不创建新会话)将确定会话是否有效.这是一个例子

public void doGet(HttpServletRequest req, HttpServletResponse res){
    HttpSession session = req.getSession(false);
    if(session == null){
       //valid session doesn't exist
       //do something like send the user to a login screen
    }
    if(session.getAttribute("username") == null){
       //no username in session
       //user probably hasn't logged in properly
    }

    //now lets pretend to log the user out for good measure
    session.invalidate();
}
Run Code Online (Sandbox Code Playgroud)

另外,如果我正确地阅读了您的问题,并且您将信息存储在您自己的地图中,则需要注意不要创建内存泄漏并自行清除哈希表中的条目.


Ter*_*zki 0

您不应该检查保存的会话是否有效,而应该查看HttpServletRequestservlet 上的 并检查isRequestedSessionIdValid()它。在 servlet 中工作时,您始终可以Session从 中获取Request,而不是将其保存到哈希表中。