关于cookie与jsessionid的奇耻大坑

纠结名字 发布于 2015/04/27 15:59
阅读 3K+
收藏 1

项目在本地测试通过,本地容器为tomcat。上线到sit环境,sit环境为jboss,引发一个问题。问题的现象是session总会在某个页面失效,造成一些请求因为Filter的原因跳转到登陆页。

经定位发现,其实session并不是失效,而是彻底的换了另一个session,甚至多个session共存。引起多个session的原因是,当我在登陆页完成登陆时,jsessionid这个cookie的path为根路径/,但是当我访问另一个页面时,比如/test/test.htm,又生成另一个session,jsessionid的cookie path变成了/test,自然,其它路径可能会生成其它path的jsessionid。

显然server端保存的数据只能根据jsessionid来获取,但是因为客户端jsessionid变了,所以登陆时保存的凭证就找不到了,Filter也会无法通过。

尝试办法过配置web.xml,设置cookie path:

<session-config>
    <cookie-config>
        <path>/</path>
    </cookie-config>
</session-config>

但是这个也无法解决问题,劳烦各路大神显显神通,看谁还遇到过这个问题,怎么解决的。

加载中
0
纠结名字

@红薯 @Black_JackQ 这个问题我已经纠结大概三四天的工作时间,但就在刚刚,剧情神逆转!

其实在我本地一直都会重现这个问题,但是在同事那边竟然有不是每次都重现。然后同事坚持在我电脑上再试一次,把我所有浏览器都关了,然后问题竟然就没了。

经过这几天的定位,我忽然意识到问题的根源在于我同时开了dev和sit页面,造成jsessionid串了。嗯,大概就是这个问题,因为我现在本地不会重现这个bug了。

嗯,我自己跟自己玩了三四天!!!

HostSugar
HostSugar
回复 @纠结名字 : 原来如此 :)
纠结名字
回复 @东门吹风 : 可能是因为我把本地hosts改成了和sit环境一样的域名导致的。
HostSugar
HostSugar
就算 dev 和 sit 都开着,但实际上是部署在不同地方的项目,怎么会session串掉呢?
0
红薯
红薯
红薯
回复 @纠结名字 : 好吧,其实还是 #Tomcat#
纠结名字
回复 @红薯 : jboss
红薯
红薯
回复 @纠结名字 : 服务器是什么?#Resin#
纠结名字
本地tomcat没有问题,服务器上有问题,但服务器不是tomcat。我找运维看看server的配置里有没有设置这个path
0
Jack_Q
Jack_Q

有负载均衡吗?

有要配置session共享和ticket策略。


Jack_Q
Jack_Q
回复 @纠结名字 : 估计jboss的session timeout时间要配置下。
纠结名字
公司的服务器都是统一配置的,服务器是单机的,貌似还没有遇到过这种问题
0
杨鬼
杨鬼
恭喜..终于解决了..貌似我以前也是开发也开好几个窗口...session也串了..
返回顶部
顶部