如何检查会话是否存在?
我正在使用创建会话
HttpSession session = request.getSession();
在创建会话之前,我想检查它是否存在。 我该怎么办?
如果要在创建之前检查此项,请执行以下操作:
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. }
这节省了一行和一个boolean
。 request.getSession()
与request.getSession(true)
的作用相同。
有一个函数request.getSession(boolean create)
参数:
create
– 如果需要,为true以为此请求创建新会话; 如果没有当前会话,则返回false
因此,如果会话不存在,您可以简单地传递false
以告诉getSession
返回null。
if(null == session.getAttribute("name")){ // User is not logged in. }else{ // User IS logged in. }
HttpSession session = request.getSession(true); if(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
欢呼,Jørgen
我想补充一点,如果您为连接到您网站的每个新用户创建一个新会话,那么您的表现将受到重创。 使用request.getSession(false)检查用户是否有会话。 如果您要根据用户是否经过身份validation来呈现视图,则使用此方法不会创建新会话。
定义一个类,比如SessionTimeoutIndicator,它实现了接口javax.servlet.http.HttpSessionBindingListener
。 接下来,创建一个SessionTimeoutIndicator对象并将其添加到用户会话中。 删除会话后,Servlet引擎将调用SessionTimeoutIndicator.valueUnbound()
方法。 然后,您可以实现valueUnbound()
来执行所需的操作。