同一域中的两个应用程序之间的 Websphere JSESSIONID cookie 覆盖(不同的端口/上下文根)

同一域中的两个应用程序之间的 Websphere JSESSIONID cookie 覆盖(不同的端口/上下文根)

背景

我有两个 webshpere 应用程序

(安装在两个单独的配置文件上,并且端口和上下文根都不同)

设想

  • 登录 app1 时,用户会获得一个 JSESSIONID cookie X
  • 在另一个浏览器选项卡(IE8)中登录 app2 时,用户会获得 JESSSIONID cookie Y

问题

  • 当登录 app2 时,JSESSIONID cookie 值 Y 会覆盖值 X,从而使 app1 的会话无效(如果用户执行任何操作,都会被返回到登录页面)

问题

  • 这是默认行为吗?两个 Web 应用可以共享一个 JSESSIONID cookie,这看起来很奇怪
  • 有没有办法配置两个 Web 应用程序以实现 JSESSIONID cookie 隔离?

答案1

由于这两个应用位于不同的配置文件中,因此它们彼此不了解。因此我预计第二个应用会看到它无法识别的会话 ID,并认为该 ID 已过期,然后创建一个新的会话 ID。

您可以将应用程序的 cookie 名称之一更改为 JSESSIONID 以外的其他名称,或者可以更改其路径,以便仅为 /app1 或 /app2 发送回它。

无论是服务器范围的Servers> 服务器名称 > Session Management>Enable Cookies还是特定应用程序的Enterprise Applications> 应用程序名称 > Session Management> Enable Cookies。如果选择后者,您还必须检查Override session management

答案2

也许你应该设置特定于应用程序的cookie 路径这样您就可以限制发送 cookie 的 URL。

Override session management这可以通过启用Enterprise Applications > AppName > Session management并选择Enable cookies > Cookie path > Set cookie path等于应用程序的上下文根来实现,例如等于应用程序1或者应用2

在我看来,这是隔离在同一主机中运行的应用程序的 cookie 的最可取的方法。

答案3

还有一种替代(AIUI,首选?)解决方案来更改 cookie 名称或添加路径组件 - 您可以将两个应用程序配置为重新使用传入的会话 ID 并以此为基础创建会话。

http://www-01.ibm.com/support/docview.wss?uid=swg21210881

答案4

我在我的环境中遇到了同样的问题。尽管在两个应用程序中都更改了 cookie 路径,但我只更改了一个应用程序 cookie 路径并启用了覆盖会话管理。进行更改后问题得到解决。

相关内容