更改Cookie JSESSIONID名称

我有一个需要在单个物理盒子中运行多个tomcat服务器的需求。 从浏览器访问这些应用程序时,当用户在应用程序之间切换时,会导致用户以前访问应用程序。 这是因为JSESSIONID Cookie冲突。

一个可能的解决scheme是在不同的上下文中运行每个应用 不幸的是,我的应用程序不能在上下文path设置中工作,因为没有任何资源通过前面提到的request.getContextPath()来访问。

这让我改变了cookie JSESSIONID的名称来解决冲突。 有没有办法做到这一点? 如果是的话,怎么样?

希望我清楚地说出我的问题。

注意:我的所有应用程序都在同一台机器的不同端口上运行。

使用Servlet API 3.0,一切都更简单。

现在你可以在你的web.xml中configuration它:

<session-config> <cookie-config> <name>MY_JSESSIONID_YAHOOOOOO</name> </cookie-config> </session-config> 

而已!

通过使用以下两个系统属性,可以轻松实现。

  • org.apache.catalina.SESSION_COOKIE_NAME
  • org.apache.catalina.SESSION_PARAMETER_NAME

任何值都可以传递给上面的属性来改变默认值。

这里find了一些示例脚本的完整细节 。

Tomcat 7将这个从org.apache.catalina.SESSION_COOKIE_NAME移到主<Context> config的一个属性。 http://tomcat.apache.org/migration-7.html#Session_manager_configuration

在context.xml文件中,以下代码适用于Tomcat7:

 <Context path="/yourApp" sessionCookieName="custom_session_id"> 

我不认为这是可能的 – 请参阅https://issues.apache.org/bugzilla/show_bug.cgi?id=42419

最后一个条目是“5.5.x版本中已经修正,并且将包含在5.5.28之后” – 这是下一个版本 – 5.5.27是当前版本。

不是100%确定这是否可行,但是您可以使用jvmRoute属性,通常在负载均衡/集群环境中使用jvmRoute属性,以使负载均衡器能够区分节点。 例:

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> 

这将最终生成一个类似“ABCDEF123456.node1”的JSESSIONID值。

文档链接 。