繁体   English   中英

jsessionid作为路径参数在Tomcat中不起作用

[英]jsessionid as path parameter not working in Tomcat

我正在使用Tomcat 7.0.84,我的Web应用程序使用Servlet 3.0部署描述符。 web.xml文件包含以下内容:

<session-config>
  <cookie-config>
    <name>JSESSIONID</name>
    <http-only>false</http-only>
  </cookie-config>
  <tracking-mode>URL</tracking-mode>
  <tracking-mode>COOKIE</tracking-mode>
</session-config>

我有一个登录到Web应用程序并建立会话的桌面应用程序。 作为对用户操作的响应,它在浏览器中调用URL。 由于我希望浏览器使用相同的会话登录,因此我添加了jsessionid path参数,如下所示:

http:// server / contextroot / path /; jsessionid = 8BDF744802E7850D5AA4AB6535163504

我完全关闭了浏览器,因此当生成URL时,将不会发送以前的会话cookie。 (我的默认浏览器是chrome,我确认是这种情况。)

我还非常在代码中通过记录ServletContext.getEffectiveSessionTrackingModes的返回值来启用了URL跟踪模式

我期望的是浏览器请求自动获取; jsessionid参数指示的会话,但是这没有发生。 每次Tomcat在其响应中包括一个新的会话cookie。

该代码曾经用于Tomcat的早期版本(可能是5.5)和Servlet 2.3规范。 我没有在Servlet 3.0规范或Tomcat文档中看到任何指示这不起作用的东西,并且我全都没有想法。

有谁知道为什么这没有按预期进行?

这是我如何使它工作的:

在web.xml中,我更改了

 <cookie-config>
    <name>JSESSIONID</name>
    <http-only>false</http-only>
  </cookie-config>

至:

 <cookie-config>
    <name>jsessionid</name>
    <http-only>false</http-only>
  </cookie-config>

因此会话cookie名称现在全为小写,并且与jsessionid路径参数的名称完全匹配。

另一种工作方式是将路径参数名称从jsessionid更改为JSESSIONID。 这是因为,在Tomcat中,如果您明确配置会话cookie的名称,它将使用该名称作为用于传递会话ID的path参数的名称。 这似乎不符合Servlet 3.0规范的7.1.3节,即:

会话ID必须在URL字符串中编码为路径参数。 参数的名称必须为jsessionid。 这是包含编码路径信息的URL的示例:

http://www.myserver.com/catalog/index.html;jsessionid=1234

但是,它确实符合第7.1.1节中的摘录:

如果Web应用程序为其会话跟踪cookie配置了自定义名称,并且在URL中编码了会话ID(前提是已启用URL重写),则相同的自定义名称也将用作URI参数的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM