Tomcat 7 Session 问题的原因

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

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

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

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

<Context path="" docBase="D:\WORKDIR\oschina\webapp" 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:\WORKDIR\oschina\webapp" reloadable="false" sessionCookiePath="/" sessionCookieName="OSCHINA_SESSION"/>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值