java httpsession有效吗?

时间:2011-07-15 17:36:16

标签: 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";
}

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

3 个答案:

答案 0 :(得分:10)

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

查看HttpServletRequest的api。如果您查看getSession(Boolean 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();
}

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

答案 1 :(得分:1)

我同意肖恩的观点。我将补充一点,这种类型的检查的一个好习惯是使用过滤器

请参阅此处Servlet Filter

只需使用Sean编写的代码并将其放入Filter中。在web.xml中定义过滤器,每次请求进入时,过滤器都将执行。

这样您就可以验证用户是否为auth。不会弄乱你的servlet代码。

答案 2 :(得分:0)

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