Java JSESSIONID是在什么条件下创建的?

Java JSESSIONID是在什么条件下创建的?,java,jsessionid,Java,Jsessionid,创建JSESSIONID时的条件是什么 它是每个域的吗?例如,如果我有一个Tomcat应用程序服务器,并且部署了多个web应用程序,那么每个上下文(web应用程序)会创建不同的JSESSIONID,还是在web应用程序之间共享,只要它们是同一个域?更正:请投票支持PeterŠtibraný的答案-它更正确、更完整 “JSESSIONID”是http会话的唯一id-。在这里,你会发现下面的句子 会话信息的范围仅限于当前web应用程序(ServletContext),因此存储在一个上下文中的信息在另

创建
JSESSIONID
时的条件是什么


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

更正:请投票支持PeterŠtibraný的答案-它更正确、更完整

“JSESSIONID”是http会话的唯一id-。在这里,你会发现下面的句子

会话信息的范围仅限于当前web应用程序(ServletContext),因此存储在一个上下文中的信息在另一个上下文中不会直接可见

因此,当您第一次访问站点时,将创建一个新会话并将其绑定到SevletContext。如果部署多个应用程序,则不会共享会话

您还可以使当前会话无效,从而创建一个新会话。e、 当从http切换到https(登录后)时,创建一个新会话是一个非常好的主意


希望,这回答了您的问题。

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

会话根据上下文而定:

SRV.7.3会议范围

HttpSession对象的作用域必须在 应用程序(或servlet上下文) 数量潜在的机制,例如 作为用于建立 会话,对于不同的会话可以相同 上下文,但引用的对象, 包括其中的属性 对象之间的共享 容器中的上下文

()


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

以下是有关
jssessionid
cookie的另一个源的一些信息:

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

最后,我查看了与Tomcat下的工作目录中的JSP相对应的生成的Java代码

不管您喜欢与否,如果您从servlet调用JSP,
JSESSIONID
将被创建

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

<%@ page session="false" %>


您可以通过JSP禁用设置
JSESSIONID

对于JSP中生成的带有自定义标记的链接,我必须使用

<%@ page session="false" %>

在Struts操作中

注意您的页面是否包含其他.jsp或.jspf(片段)!如果你不设定

<%@ page session="false" %>

在它们上,父页面也将启动一个新会话并设置JSESSIONID cookie

特别是对于.jspf页面,如果使用以下代码段配置web.xml,则会发生这种情况:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jspf</url-pattern>
    </jsp-property-group>
</jsp-config>

*.jspf

为了在其中启用Scriptlet。

不能创建会话而不显式调用getSession吗?关于“容器永远不能在上下文之间共享”,websphere有一个共享会话的选项,这就是问题的动机:)如果您只使用Servlet API,则不会。不过,可能存在特定于服务器的扩展(如您所指出的Websphere会话共享)。我相信,如果您的标记包含cookies属性,则您的context.xml文件可以控制自动会话创建,例如,现在我在创建会话的过滤器上获得了很多点击次数,而且似乎只有在第二次点击之后才可以(不是第二次刷新页面)正在创建,这引起了我的注意“会话不一定是在第一次请求时创建的…”是否相关?您能举个例子说明为什么不一定是在第一次请求时创建的吗?谢谢!@jpganz18:如果您只需调用
request.getSession()
request.getSession(true)
,则您将获得现有会话或新会话。但是,如果您的代码调用
request.getSession(false)
,则您将获得现有会话或null(如果不存在会话)。请清除会话范围的说明。@Mo链接被断开,换句话说:页面会话属性的默认值为“true”。这在某些(许多?)情况下可能是意外的。我也在tomcat上,我根本不使用jsp,但会话cookie还是创建的。您知道如何防止这种情况吗?您的意思是在包含的所有片段(.jsp和.jspf)中设置page session=false,而不在包含其余片段的主jsp中包含它吗?
<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jspf</url-pattern>
    </jsp-property-group>
</jsp-config>