如何检查会话是否存在?

24
我正在创建会话,使用的是:
HttpSession session = request.getSession();

在创建会话之前,我想检查它是否存在。我该如何做?

5个回答

41

如果你想在创建之前检查这个,那么可以这样做:

HttpSession session = request.getSession(false);
if (session == null) {
    // Not created yet. Now do so yourself.
    session = request.getSession();
} else {
    // Already created.
}

如果您在创建后不关心检查此事,那么您也可以这样做:

HttpSession session = request.getSession();
if (session.isNew()) {
    // Freshly created.
} else {
    // Already created.
}

这样可以节省一行代码和一个布尔值。 request.getSession() 的作用相当于 request.getSession(true)


23

有一个函数request.getSession(boolean create)

参数:
    create - 如果需要为此请求创建新的会话,则传递true;如果没有当前会话,则传递false以返回null。

因此,您可以简单地传递false来告诉getSession如果不存在该会话则返回null。


1
在我看来,最好的解释是指文档并保持专注。 - Daniel Bleisteiner

6
if(null == session.getAttribute("name")){  
  // User is not logged in.  
}else{  
  // User IS logged in.  
}  

5

HttpSession session = request.getSession(true); if (session.isNew()) { ...做一些事情 } else { ...做其他事情 }

.getSession(true) 告诉Java在不存在会话时创建新会话。

当然,您也可以执行以下操作:

if(request.getSession(false) != null){
    HttpSession session = request.getSession();
}

请查看:http://java.sun.com/javaee/6/docs/api/javax/servlet/http/HttpServletRequest.html。谢谢,Jørgen。

1
你需要将 false 传递给第二个 .getSession() - aioobe

4

我想补充一点,如果你为每个连接到你的网站的新用户创建一个新的会话,那么你的性能将受到严重影响。使用request.getSession(false)方法来检查用户是否有会话。使用此方法,如果你要基于用户是否经过身份验证来呈现视图,则不会创建新的会话。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接