Java HttpSession

时间:2011-02-28 10:04:44

标签: java httpsession

只有在

之后才能创建java servlet中的HttpSession
HttpSession s = request.getSession();

在我的代码中我没有写那个,但是当我使用if (request.getSession(false) == null) ...时,它不起作用。为什么呢?

5 个答案:

答案 0 :(得分:17)

调用request.getSession()时会创建一个HttpSession。

如果您默认访问JSP,它将自动创建会话。可以使用以下命令禁用此行为:<%@ page session="false">

您使用的是JSP吗?

答案 1 :(得分:15)

阅读JavaDocs,它清楚地说:

这就是request.getSession()

  

返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个会话。

另一个变体request.getSession(isCreate)

  

返回与此请求关联的当前HttpSession,如果没有当前会话且create为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容器很有可能为您创建会话。

参阅:

  1. Java Doc HttpSession
  2. 关于JavaRaunch的讨论:is HttpSession created automatically?
  3. 但是,为了更安全,请使用request.getSession()来获取会话,并仅在需要验证是否已创建会话时使用request.getSession(false)

答案 2 :(得分:3)

除了Nishant的答案之外,会话可以由JSP页面隐式创建,除非您将它们配置为不使用<%@ page session = "false" %>创建会话。

答案 3 :(得分:1)

要完成它:

    除非您在servlet中调用request.getSession(),否则不会创建
  • 会话,使用request.getSession(false)来获取现有会话而不创建新会话
  • 如果您使用JSP页面,会自动为您创建会话 - 变量session - 除非您指定<%@ page session="false" %>
  • 即使您的会话是自动创建的,您也可以使用session.isNew()查找是否已重新创建

答案 4 :(得分:0)

尝试从浏览器中删除会话Cookie并进行其他测试。如果它不起作用,则其他组件在该调用之前创建一个新会话。