Java HttpSession

2022-09-04 06:05:31

Java servlet 中的 HttpSession 是不是在以下之后才创建的

HttpSession s = request.getSession();

?

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


答案 1

HttpSession 是在调用 request.getSession() 时创建的。

但是,如果缺省情况下访问 JSP,它将自动创建一个会话。可以使用以下命令禁用此行为:<%@ page session="false">

您是否在使用 JSP?


答案 2

阅读JavaDocs,它清楚地说:

这说,request.getSession()

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

和另一个变体 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.

指:

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

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


推荐