Java jsessionid作为路径参数在Tomcat中不起作用
我使用的是Tomcat7.0.84,我的web应用程序使用Servlet3.0部署描述符。web.xml文件包含以下内容:Java jsessionid作为路径参数在Tomcat中不起作用,java,session,tomcat,servlets,jsessionid,Java,Session,Tomcat,Servlets,Jsessionid,我使用的是Tomcat7.0.84,我的web应用程序使用Servlet3.0部署描述符。web.xml文件包含以下内容: <session-config> <cookie-config> <name>JSESSIONID</name> <http-only>false</http-only> </cookie-config> <tracking-mode>URL</
<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参数,如下所示:
我完全关闭浏览器,因此在生成URL时,不会发送以前的会话cookie。我的默认浏览器是chrome,我验证了这一点
我在代码中还非常清楚,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名称现在都是小写的,并且与jsessionid路径参数的名称完全匹配
另一种工作方式是将路径参数名称从JSSessionID更改为JSSessionID。这是因为,在Tomcat中,如果您明确地为会话cookie配置了一个名称,它会使用该名称作为用于传递会话ID的path参数的名称。这似乎不符合Servlet 3.0规范的第7.1.3节,其中指出:
会话ID必须编码为URL字符串中的路径参数。
参数的名称必须是jsessionid。下面是一个例子
包含编码路径信息的URL:
但是,它确实符合第7.1.1节的摘录:
如果web应用程序为其会话跟踪配置自定义名称
cookies,相同的自定义名称也将用作URI的名称
参数,如果会话id编码在URL中,则提供该URL
已启用重写
<cookie-config>
<name>jsessionid</name>
<http-only>false</http-only>
</cookie-config>