当前位置:  开发笔记 > 编程语言 > 正文

在什么条件下创建了JSESSIONID?

如何解决《在什么条件下创建了JSESSIONID?》经验,为你挑选了4个好方法。

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

是按域名吗?例如,如果我有一个Tomcat应用服务器,并且我部署了多个Web应用程序,JSESSIONID那么每个上下文(Web应用程序)是否会创建不同的Web应用程序,或者只要它们是同一个域,它是否可以跨Web应用程序共享?



1> Peter Štibra..:

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

会话是根据具体情况:

SRV.7.3会话范围

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

(Servlet 2.4规范)

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


无法显式调用getSession来创建会话吗?关于“绝不能在容器之间的上下文之间共享”,Websphere可以选择共享会话,这是引发问题的动机:)

2> Rangachari A..:

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

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

我终于看一下Tomcat下工作目录中与JSP相对应的生成的Java代码.

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

补充:我刚刚发现添加以下JSP指令:

<%@ page session="false" %>

您可以禁用JSESSIONIDJSP 的设置.


换句话说:页面会话属性的默认值为"true".在某些(很多?)案例中可能出乎意料.

3> Mo...:

更正:请投票给PeterŠtibraný的答案 - 它更正确,更完整!

"JSESSIONID"是http会话的唯一ID - 请参阅此处的javadoc.在javadoc中,您将找到以下句子:"会话信息仅限于当前Web应用程序(ServletContext),因此存储在一个上下文中的信息将不会在另一个上下文中直接显示."

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

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

希望,这回答了你的问题.



4> polaretto..:

请注意,如果您的页面包含其他.jsp或.jspf(片段)!如果你没有设置

<%@ page session="false" %>

同样,父页面将结束新会话并设置JSESSIONID cookie.

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


    
        *.jspf
    

为了在其中启用scriptlet.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有