在HTTP和HTTPS之间切换时,JSessionID会被覆盖。 怎么解决?

我们有以下情况:

  1. 转到http :// website /并单击指向http :// website / appX的链接
    检查cookie是否显示带有secure = NO的JSessionID。

  2. 打开另一个浏览器窗口或选项卡,然后转到https :// website /并单击指向https :// website / appY的链接。
    检查cookie是否显示带有secure = YES的JSessionID。

  3. 尝试与步骤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,以防止问题发生。