Java HttpSession
Java servlet 中的 HttpSession 是不是在以下之后才创建的
HttpSession s = request.getSession();
?
在我的代码中,我没有写那个,但是当我使用时,它不起作用。为什么?if (request.getSession(false) == null) ...
Java servlet 中的 HttpSession 是不是在以下之后才创建的
HttpSession s = request.getSession();
?
在我的代码中,我没有写那个,但是当我使用时,它不起作用。为什么?if (request.getSession(false) == null) ...
HttpSession 是在调用 request.getSession() 时创建的。
但是,如果缺省情况下访问 JSP,它将自动创建一个会话。可以使用以下命令禁用此行为:<%@ page session="false">
您是否在使用 JSP?
阅读JavaDocs,它清楚地说:
返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个会话。
和另一个变体 request.getSession(isCreate)
返回与此请求关联的当前 HttpSession,或者,如果没有当前会话并且 create 为 true,则返回一个新会话。
如果 create 为 false 并且请求没有有效的 HttpSession,则此方法返回 null。
若要确保正确维护会话,必须在提交响应之前调用此方法。如果容器正在使用 Cookie 来维护会话完整性,并在提交响应时要求创建新会话,则会引发 IllegalStateException。
更新
经过一些研究,我发现除非在某个地方调用,否则不会创建会话。因为,默认情况下,您的 Servlet 容器很有可能会为您创建会话。request.getSession()
The servlet container uses this interface to create a session between an HTTP client and an HTTP server.
指:
但是,为了更安全起见,请使用以获取会话,并且仅在需要验证是否已创建会话时使用。request.getSession()
request.getSession(false)