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)
另外,如果我正确地阅读了您的问题,并且您将信息存储在您自己的地图中,则需要注意不要创建内存泄漏并自行清除哈希表中的条目.
您不应该检查保存的会话是否有效,而应该查看HttpServletRequestservlet 上的 并检查isRequestedSessionIdValid()它。在 servlet 中工作时,您始终可以Session从 中获取Request,而不是将其保存到哈希表中。