在什么条件下创建 JSESSIONID?

2022-08-31 05:08:52

何时/创建时的条件是什么?JSESSIONID

它是按域划分的吗?例如,如果我有一个 Tomcat 应用程序服务器,并且我部署了多个 Web 应用程序,那么是为每个上下文(Web 应用程序)创建一个不同的应用程序,还是只要它们是同一个域,它就会在 Web 应用程序之间共享?JSESSIONID


答案 1

JSESSIONID cookie 是在创建会话时创建/发送的。会话是在代码调用时或首次调用时创建的。如果您只想获取会话,但如果它不存在,则不创建它,请使用 -- 这将返回一个会话或 .在这种情况下,不会创建新会话,也不会发送 JSESSIONID cookie(这也意味着会话不一定是在第一次请求时创建的...创建会话,您和您的代码处于控制之中)request.getSession()request.getSession(true)request.getSession(false)null

会话是按上下文划分的:

SRV.7.3 会话范围

HttpSession 对象的作用域必须在应用程序(或 servlet 上下文)级别。对于不同的上下文,底层机制(如用于建立会话的 Cookie)可以是相同的,但容器绝不能在上下文之间共享引用的对象(包括该对象中的属性)。

(Servlet 2.4 规范)

更新:如果还没有会话,则每次调用 JSP 页都会隐式创建一个新会话。这可以通过 page 指令关闭,在这种情况下,会话变量在 JSP 页面上根本不可用。session='false'


答案 2

以下是有关 Cookie 的另一个来源的一些信息:JSESSIONID

我只是在调试一些在tomcat服务器上运行的Java代码。我没有在代码中的任何位置显式调用,但我注意到仍在设置cookie。request.getSession()JSESSIONID

最后,我看了一下生成的 Java 代码,这些代码对应于 Tomcat 下工作目录中的 JSP。

看来,无论你喜欢与否,如果你从 servlet 调用 JSP,就会被创建出来!JSESSIONID

已添加:我刚刚通过添加以下JSP指令发现:

<%@ page session="false" %>

您可以禁用 由 JSP 设置。JSESSIONID


推荐