Java HttpSession

Ser*_*gey 13 java httpsession

是否在Java servlet中创建了HttpSession

HttpSession s = request.getSession();
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*leu 17

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

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

你在使用JSP吗?

  • "调用request.getSession()时会创建一个HttpSession." 正确,除非会话已存在,否则返回当前会话.请参阅[HttpServletRequest](http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getSession()). (2认同)

Nis*_*ant 15

阅读JavaDocs,它清楚地说:

这就是说,request.getSession()

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

另一个变种request.getSession(isCreate)

返回与此请求关联的当前HttpSession,如果没有当前会话且create为true,则返回新会话.

如果create为false且请求没有有效的HttpSession,则此方法返回null.

要确保正确维护会话,必须在提交响应之前调用此方法.如果容器使用cookie来维护会话完整性,并且在响应提交时要求创建新会话,则抛出IllegalStateException.


更新

在一点研究中,我发现除非在某处调用Session,否则不会创建Session .因为,您的Servlet容器很可能默认为您创建会话.request.getSession()The servlet container uses this interface to create a session between an HTTP client and an HTTP server.

参考:

  1. Java Doc HttpSession
  2. 关于JavaRaunch的讨论:HttpSession是自动创建的吗?

但是,为了更安全,请使用request.getSession()获取会话,并request.getSession(false)仅在需要验证会话是否已创建时使用.