2010-05-12 187 views

回答

20

有一个功能request.getSession(boolean create)

参数:
        create - 真正创造必要时申请一个新的会话;假返回NULL如果没有当前会话

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

+1

...最好的解释imho ...指的是文档,并保持专注。 – 2010-05-12 12:04:38

2

HttpSession session = request.getSession(true); 如果(session.isNew()){ ...做一些 }其他{ ...做别的事情 }

.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

欢呼声, 耶尔

+0

您必须将'false'传递给第二个'.getSession()'。 – aioobe 2010-05-12 11:28:28

+0

抱歉...错字。纠正。谢谢。 – rakke 2010-05-12 11:31:24

29

如果你要检查这个之前创建,那么这样做:

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. 
} 

这节省了线路和booleanrequest.getSession()request.getSession(true)的做法相同。

0

定义一个类,例如SessionTimeoutIndicator,它实现了接口javax.servlet.http.HttpSessionBindingListener。接下来创建一个SessionTimeoutIndicator对象并将其添加到用户会话中。当会话被删除时,Servlet引擎将调用SessionTimeoutIndicator.valueUnbound()方法。然后您可以执行valueUnbound()来执行所需的操作。

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

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