java servlet中的HttpSession是否仅在之后创建
HttpSession s = request.getSession();
?
在我的代码中我没有写,但是当我使用时if (request.getSession(false) == null) ...
,它不起作用。为什么?
java servlet中的HttpSession是否仅在之后创建
HttpSession s = request.getSession();
?
在我的代码中我没有写,但是当我使用时if (request.getSession(false) == null) ...
,它不起作用。为什么?
调用 request.getSession() 时会创建一个 HttpSession。
但是如果您默认访问 JSP,它将自动创建一个会话。可以使用以下命令禁用此行为:<%@ page session="false">
你在使用 JSP 吗?
阅读 JavaDocs,它清楚地说:
这就是说,request.getSession()
返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个。
而另一个变体request.getSession(isCreate)
返回与此请求关联的当前 HttpSession,或者,如果没有当前会话并且 create 为 true,则返回一个新会话。
如果 create 为 false 并且请求没有有效的 HttpSession,则此方法返回 null。
为确保正确维护会话,您必须在提交响应之前调用此方法。如果容器使用 cookie 来维护会话完整性,并且在提交响应时被要求创建新会话,则会引发 IllegalStateException。
更新
经过一番研究,我发现除非在某处被调用,否则不会创建Session 。因为,您的 Servlet 容器很有可能默认为您创建 Session。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)
仅在需要验证会话是否已创建时使用。
除了 Nishant 的回答之外,会话可以由 JSP 页面隐式创建,除非您将它们配置为不使用<%@ page session = "false" %>
.
要使其完整:
request.getSession()
在 servlet 中调用,用于在request.getSession(false)
不创建新会话的情况下获取现有会话session
- 除非您指定<%@ page session="false" %>
session.isNew()
它来查找它是否是新创建的尝试从浏览器中删除会话 cookie 并进行另一次测试。如果它不起作用,那么其他一些组件正在该调用之前创建一个新会话。