更改 cookie JSESSIONID 名称
我需要在单个物理设备中运行多个 tomcat 服务器。 从浏览器访问这些应用程序时,当用户在应用程序之间切换时,会导致用户先前访问的应用程序注销。 这是因为 JSESSIONID cookie 冲突。
一种可能的解决方案是在不同的上下文中运行每个应用程序。 不幸的是,我的应用程序无法在上下文路径设置中工作,因为没有任何资源是通过前面添加的 request.getContextPath() 来访问的。
这让我不得不更改 cookie JSESSIONID 的名称来解决冲突。 有没有办法做到这一点? 如果是,怎么办?
希望我能清楚地表达我的问题。
注意:我的所有应用程序都在同一台计算机的不同端口上运行。
I have a requirement of having to run multiple tomcat server in single physical box. While accessing these from a browser, when user switches between the applications, it results in logging out the user previously access application. This is because of JSESSIONID cookie conflict.
One possible solution is to run each applications in different context. Unfortunately, my applications will not work in context path setting as none of the resources are accessed with request.getContextPath() prepended in front.
This leaves me to change the name of cookie JSESSIONID to resolve the conflict. Is there a way to do this? If yes, how?
Hope I'm clear in stating my question.
Note: All my application are running in different port in the same machine.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
使用 Servlet API 3.0,一切都变得更加简单。
现在您可以在 web.xml 中配置它:
就是这样!
Everything is much simpler with Servlet API 3.0.
Now you can configure it in your web.xml:
That's it!
以下内容适用于 Tomcat7 上的 context.xml 文件:
The following works for me on Tomcat7 in the context.xml file:
通过使用以下两个系统属性,可以轻松实现这一点。
任何值都可以传递给上述属性来更改默认值。
这里找到完整详细信息以及一些示例脚本。
By Using two following system properties this can be achieved with ease.
Any value can be passed to above properties to change the default values.
Here complete details with some sample script is found.
Tomcat 7 将其从 org.apache.catalina.SESSION_COOKIE_NAME 移至主上的属性。 配置。
http://tomcat.apache.org/migration-7.html#Session_manager_configuration
Tomcat 7 moves this from org.apache.catalina.SESSION_COOKIE_NAME to an attribute on the main <Context> config.
http://tomcat.apache.org/migration-7.html#Session_manager_configuration
我认为目前不可能 - 请参阅 https://issues。 apache.org/bugzilla/show_bug.cgi?id=42419
最后一个条目指出“此问题已在 5.5.x 中修复,并将包含在 5.5.28 以后的版本中” - 这是下一个版本 - 5.5。 27 是当前版本。
I don't think it's possible at this point - see https://issues.apache.org/bugzilla/show_bug.cgi?id=42419
The last entry states "This has been fixed in 5.5.x and will be included in 5.5.28 onwards" - which is the next point release - 5.5.27 is the current release.
不能 100% 确定这是否有效,但您可以使用 jvmRoute 属性,该属性通常在负载平衡/集群环境中使用,以便负载平衡器能够区分节点。 示例:
这最终将生成一个类似于“ABCDEF123456.node1”的 JSESSIONID 值。
文档链接。
Not 100% sure if this will work, but you can use the
jvmRoute
attribute, which is generally used in a load-balanced/clustered environment for the load balancers to be able to tell the nodes apart. Example:This will end up generating a JSESSIONID value that looks like "ABCDEF123456.node1".
Documentation link.
中找到了它
我在 Tomcat 的 /tomcat/conf/server.xml server.xml
5D33F755D8D75EF7C8E840.instanceName
I found it in Tomcat at /tomcat/conf/server.xml
server.xml
5D33F755D8D75EF7C8E840.instanceName