更改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值。
文档链接 。