更改cookie JSESSIONID名称

时间:2009-05-18 10:22:54

标签: java tomcat jsessionid

我需要在单个物理盒中运行多个tomcat服务器。从浏览器访问这些内容时,当用户在应用程序之间切换时,会导致用户先前登录访问应用程序。这是因为JSESSIONID cookie冲突。

一种可能的解决方案是在不同的上下文中运行每个应用程序。不幸的是,我的应用程序不能在上下文路径设置中工作,因为前面没有前面的request.getContextPath()访问任何资源。

这使我可以更改cookie JSESSIONID的名称来解决冲突。有没有办法做到这一点?如果是,怎么样?

希望我能说清楚我的问题。

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

7 个答案:

答案 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)

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

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

可以将任何值传递给上述属性以更改默认值。

此处找到了带有一些示例脚本的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值。

Documentation link

答案 6 :(得分:0)

我在Tomcat的/tomcat/conf/server.xml中找到了它

server.xml

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

5D33F755D8D75EF7C8E840.instanceName