牛骨文教育服务平台(让学习变的简单)
博文笔记

Tomcat 7 Session 问题的原因

创建时间:2014-10-14 投稿人: 浏览次数:1167

经过多次测试证实原因是 Tomcat 7 在设置 JSESSIONID 这个 Cookie 时,Path 参数值有问题。

Tomcat 7 应该是直接获取 request.getContextPath() 的值来设置 Cookie 的 Path 属性

这也就是为什么当我们把应用部署在某个目录,例如 /test 下就没问题,而当部署在 ROOT 下就无法正常工作的原因。

因为当需要将目录部署在 ROOT 下时 ,配置一般是:

<Context path="" docBase="D:WORKDIRoschinawebapp" reloadable="false"/>

而这时 request.getContextPath() 返回的是一个空字符串,导致 Cookie 变成

Set-Cookie: JSESSIONID=E33BFF1384284F317D75025391BF5CB3; Path=""; HttpOnly

而 IE 浏览器恰恰不支持 Path=“” 的做法,必须是 Path="/" ,除了 IE 外,其他浏览器都工作正常。

另外, Tomcat 7 以前版本则聪明得多,知道将 “” 转为 “/”


下载 Tomcat 7 的源码,找了半天,终于找到了出问题的源码了

类名:ApplicationSessionCookieConfig
方法:createSessionCookie

这里直接把 Context 的 path 赋值给了 Cookie 的 path 属性,没有做任何处理。

搞定,请看配置

<Context path="" docBase="D:WORKDIRoschinawebapp" reloadable="false" sessionCookiePath="/" sessionCookieName="OSCHINA_SESSION"/>


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。