Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jsessionid作为路径参数在Tomcat中不起作用_Java_Session_Tomcat_Servlets_Jsessionid - Fatal编程技术网

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

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</

我使用的是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</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>