在HTTP和HTTPS之间切换时,JSessionID会被覆盖。 怎么解决?
我们有以下情况:
-
转到http :// website /并单击指向http :// website / appX的链接
检查cookie是否显示带有secure = NO的JSessionID。 -
打开另一个浏览器窗口或选项卡,然后转到https :// website /并单击指向https :// website / appY的链接。
检查cookie是否显示带有secure = YES的JSessionID。 -
尝试与步骤1中创建的窗口/选项卡进行交互。我的会话已过期…
如果我们重复这些步骤,但在步骤2中使用https :// website / appX而不是https :// website / appY,那么JSessionID cookie将保留Secure = NO。
所有cookie都有JSessionId,最后附加了jvmRoute。
–
我们正在使用:
Apache(2.2.3-43.el5_5.3)+ mod_jk(带粘性会话)和负载均衡器配置到几个JBoss实例(v 4.3.0)。
我发现只有一个完全相同问题的链接(通常其他的使用PHP): http : //threebit.net/mail-archive/tomcat-users/msg17687.html
问:我们如何防止JSessionId cookie被重写?
从安全的角度来看,这是正确的行为,因为如果在http中也使用相同的会话ID / cooki,攻击者可以窃取https中使用的会话ID / cooki。
有关详细信息,请参阅我的答案。
因此,如果您想构建一个安全的应用程序(我怀疑这个,因为您使用https),那么您不能改变它!
从HTTPS切换到HTTP或反之亦然,不会保留SessionID / Cookie。 您可以在URL中传递这些参数以传递值。
在deploy / jboss-web.deployer / server.xml中的连接器配置(对于Tomcat在JBoss中的捆绑版本)中,有一个emptySessionPath
属性,用于控制是否在上下文路径上设置会话cookie。
如果将此设置为false,则每个应用程序将有一个cookie,以防止问题发生。