我需要在单个物理盒中运行多个tomcat服务器。从浏览器访问这些内容时,当用户在应用程序之间切换时,会导致用户先前登录访问应用程序。这是因为JSESSIONID cookie冲突。
一种可能的解决方案是在不同的上下文中运行每个应用程序。不幸的是,我的应用程序不能在上下文路径设置中工作,因为前面没有前面的request.getContextPath()访问任何资源。
这使我可以更改cookie JSESSIONID的名称来解决冲突。有没有办法做到这一点?如果是,怎么样?
希望我能说清楚我的问题。
注意:我的所有应用程序都在同一台计算机的不同端口运行。
答案 0 :(得分:55)
使用Servlet API 3.0,一切都变得简单。
现在您可以在web.xml中配置它:
<session-config>
<cookie-config>
<name>MY_JSESSIONID_YAHOOOOOO</name>
</cookie-config>
</session-config>
就是这样!
答案 1 :(得分:15)
以下适用于我在context.xml文件中的Tomcat7:
<Context path="/yourApp" sessionCookieName="custom_session_id">
答案 2 :(得分:14)
通过使用以下两个系统属性,可以轻松实现。
可以将任何值传递给上述属性以更改默认值。
此处找到了带有一些示例脚本的complete details。
答案 3 :(得分:12)
Tomcat 7将此文件从org.apache.catalina.SESSION_COOKIE_NAME移至主&lt; Context&gt;上的属性配置。 http://tomcat.apache.org/migration-7.html#Session_manager_configuration
答案 4 :(得分:4)
我认为此时不可能 - 请参阅https://issues.apache.org/bugzilla/show_bug.cgi?id=42419
最后一个条目指出“这已在5.5.x中修复,并将包含在5.5.28以后” - 这是下一个版本 - 5.5.27是当前版本。
答案 5 :(得分:2)
不是100%确定这是否有效,但您可以使用jvmRoute
属性,该属性通常用于负载均衡/群集环境中,以便负载均衡器能够将节点区分开来。例如:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
这将最终生成一个看起来像“ABCDEF123456.node1”的JSESSIONID值。
答案 6 :(得分:0)
我在Tomcat的/tomcat/conf/server.xml中找到了它
server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="instanceName">
5D33F755D8D75EF7C8E840.instanceName