是HttpSession中的Java Servlet的仅的Java HttpSession中
HttpSession s = request.getSession();
后产生的?
在我的代码中,我没有写这个,但是当我使用if (request.getSession(false) == null) ...
时,它不起作用。为什么?
是HttpSession中的Java Servlet的仅的Java HttpSession中
HttpSession s = request.getSession();
后产生的?
在我的代码中,我没有写这个,但是当我使用if (request.getSession(false) == null) ...
时,它不起作用。为什么?
尝试从浏览器中删除会话cookie并进行另一个测试。如果它不起作用,那么其他组件在该调用之前正在创建一个新的会话。
读的JavaDoc,上面清清楚楚地写着:
返回与此请求相关的当前会话,或者如果请求没有会话,创建一个。
而另一个变种request.getSession(isCreate)
返回与此请求关联的HttpSession的电流,或者如果没有当前会话,并创建为true,则返回一个新的会话。
如果create为false且请求没有有效的HttpSession,则此方法返回null。
要确保会话得到正确维护,您必须在提交响应之前调用此方法。如果容器使用cookie来维护会话完整性,并且在提交响应时被要求创建新会话,则会抛出IllegalStateException。
更新
对位的研究,我发现,会话是不创建除非request.getSession()
被称为地方。由于,The servlet container uses this interface to create a session between an HTTP client and an HTTP server.
默认情况下,您的Servlet容器很有可能会为您创建会话。
参考:
但是,更安全侧,使用request.getSession()
来获取会话,并使用request.getSession(false)
只有当你需要验证一个会话是否已经创建。
除了Nishant的回答说明,会话可以由JSP页面隐式创建,除非您将它们配置为不创建与<%@ page session = "false" %>
的会话。
为了使它完成:
request.getSession()
,在你的servlet,使用request.getSession(false)
获得,而无需创建新的会话session
- 除非您指定<%@ page session="false" %>
session.isNew()
找出它是否已新创建
你是什么意思'它不起作用?你有例外吗?如果你的测试返回与null不同的东西,这意味着该会话已经存在,并且不需要创建一个新的。 – reef 2011-02-28 10:09:19
所以你得到request.getSession(false)!= null。 – PeterMmm 2011-02-28 10:11:05
我的意思是(request.getSession(false)== null)应该是真的,但它是假的,我不知道为什么 – Sergey 2011-02-28 10:11:13