【发布时间】:2013-01-06 03:47:22
【问题描述】:
这个问题让我发疯了,所以也许有人可以帮助我了解问题所在。我有一个由 HAProxy 引导的 tomcat Web 应用程序。 HAProxy 也在进行 SSL 卸载,并配置为使用粘性会话。我正在使用 Tomcat 的会话复制功能,它似乎工作得很好。会话出现在两个应用服务器上。
由于某种原因,Tomcat 会为每个 Web 请求生成一个新的 JSESSIONID,然后将旧会话的内容复制到新会话中。也就是说,我的会话内容还在新会话中,只是生成了一个新的ID并发回给客户端。但它只对我的 Web 应用程序执行此操作。它不会为 /manager 应用程序执行此操作。
我已经尝试了书中的每一个技巧,比如在我的 context.xml 中设置这个:
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" changeSessionIdOnAuthentication="false" />
并在我的 Context 元素上设置这些属性:
<Context path="/myapp" reloadable="false" override="true" useNaming="false" allowLinking="true" useHttpOnly="false" sessionCookiePath="/" sessionCookiePathUsesTrailingSlash="false">
结果还是一样。 Tomcat 为每个请求生成一个新的会话 id,并将旧会话的内容复制到新的 id 中。
我怀疑它与 HAProxy 有关,除了 /manager 应用程序也在 HAProxy 后面并且它没有表现出这种行为。
Tomcat 为什么要这样做,我可以做些什么来防止它?
【问题讨论】:
-
可能是无状态 JSP?会话=真。 (但在你的情况下不会提示。)
-
对不起,我没有关注你。我什至没有为我的测试使用 JSP。
-
我想知道这个的实际问题是什么。如果 JSESSIONID 发生变化会有什么危害?
标签: java session tomcat haproxy jsessionid