【问题标题】:Changing cookie JSESSIONID name更改 cookie JSESSIONID 名称
【发布时间】:2010-10-26 23:57:14
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你是如何在同一端口上同时运行“多个 tomcat 服务器”的?
  • @HarryLime:代理服务器可能会发生。

标签: java tomcat jsessionid


【解决方案1】:

使用 Servlet API 3.0,一切都变得简单得多。

现在您可以在 web.xml 中配置它:

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

就是这样!

【讨论】:

  • 最佳答案!
  • 我确实使用了这个配置,但似乎它一直没有工作,因为我在这里问了我的问题并得到了一些其他建议。stackoverflow.com/questions/54698948/renaming-jsessionid
  • 有没有人在 Spring Boot 应用程序中解决这个问题?会有很大帮助
  • @JawadhSalihRifath 在您的应用程序属性 server.servlet.session.cookie.name=
【解决方案2】:

以下内容适用于我在 Tomcat7 上的 context.xml 文件:

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

【讨论】:

    【解决方案3】:

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

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

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

    在这里complete details 找到了一些示例脚本。

    【讨论】:

    • 这不再适用于 Tomcat7+。现在您可以在 Context 配置中进行设置,请参阅@timkingman 的回答。
    • 我在 tomcat 6 上做了这个,但我仍然遇到同样的问题
    【解决方案4】:

    Tomcat 7 将其从 org.apache.catalina.SESSION_COOKIE_NAME 移动到主 配置上的属性。 http://tomcat.apache.org/migration-7.html#Session_manager_configuration

    【讨论】:

      【解决方案5】:

      我认为目前不可能 - 请参阅 https://issues.apache.org/bugzilla/show_bug.cgi?id=42419

      最后一个条目指出“这已在 5.5.x 中修复,并将包含在 5.5.28 以后的版本中” - 这是下一个版本 - 5.5.27 是当前版本。

      【讨论】:

      • 感谢您挖掘这个。看起来留给我的唯一选择是修改现有的 tomcat 源。错误/功能报告清楚地说明了我的确切要求和解决方案。感谢您的回答。
      【解决方案6】:

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

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

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

      Documentation link.

      【讨论】:

      • 这是关于cookie的值,而不是它的名字,对吧?
      【解决方案7】:

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

      服务器.xml

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

      5D33F755D8D75EF7C8E840.instanceName

      【讨论】:

        【解决方案8】:
            final SessionCookieConfig sessionCookieConfig = servletContext.getSessionCookieConfig();
            sessionCookieConfig.setSecure(true);
            sessionCookieConfig.setHttpOnly(true);
            // Set __Host- prefix
            sessionCookieConfig.setName("__Host-JSESSIONID");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-25
          • 2013-01-11
          • 2018-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-25
          • 2022-01-15
          相关资源
          最近更新 更多