[英]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的示例:
但是,它确实符合第7.1.1节中的摘录:
如果Web应用程序为其会话跟踪cookie配置了自定义名称,并且在URL中编码了会话ID(前提是已启用URL重写),则相同的自定义名称也将用作URI参数的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.