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

背景

我有两个webshpere应用程序

  • app1在http://example.com:9080/app1上
  • app2在http://example.com:9081/app2上

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

脚本

  • 当login到app1时,用户得到一个JSESSIONID cookie X.
  • 当在另一个浏览器选项卡(IE8)中login到app2时,用户将获得一个JESSSIONID cookie Y.

问题

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

  • 这是默认的行为? 它看起来很奇怪,两个Web应用程序可以共享一个JSESSIONID cookie
  • 有没有办法configuration这两个Web应用程序使JSESSIONID cookie隔离?

这两个应用程序彼此不知道,因为他们在不同的configuration文件。 所以我期望第二个看到它不认识的会话ID,假设它是一个过期的,并创build一个新的。

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

在“ Servers >服务器名称> Session Management > Enable Cookies或“ Enterprise Applications >应用程序名称> Session Management > Enable Cookies下的特定应用程序的服务器范围内。 如果select后者,则还必须检查“ Override session management

可能是你应该设置一个应用程序特定的cookiepath,以便限制一个cookie将被发送的URL。

这可以通过在Enterprise Applications > AppName > Session management启用Override session management ,然后selectEnable cookies > Cookie path > Set cookie path设置为等于应用程序的上下文根,例如等于app1app2来完成

在我看来,这是隔离在同一个主机上运行的应用程序的最好的方法。

有一个替代(AIUI,首选?)解决scheme来更改cookie名称或添加一个path组件 – 您可以configuration这两个应用程序重新使用传入的会话ID,并围绕它创build的会话。

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

我在我的环境中有同样的问题。 尽pipe在应用程序中更改了Cookiepath,但我只更改了一个应用程序的Cookiepath并启用了覆盖会话pipe理。 问题在更改后得到解决。