1

我有一些带有memcached会话管理器的tomcat7,使用nginx代理tomcat,没关系。

但是现在,我们需要在 iphone safari 上付费,并通过带有 jsessionid 的 url 访问。所以将 cookies="false" 添加到 tomcat 上下文中。然后我们将失去会话非常访问(在 url 中带有 jsessionid)。但是,当使用 nginx 和一个 tomcat 服务器,或者直接访问 tomcat 服务器时,一切都很好。

为什么会发生?有没有人能解决这个问题。谢谢

4

1 回答 1

0

非常感谢马丁·格罗茨克。Tomcat日志很好。我在 msm 的日志中发现了一些东西。

Nginx 只代理一个配置为 cookies=“false” 的tomcat
, 第一次请求,msm 没有将会话备份到 memcached,
下一个请求在 url 中使用 jsessionid,在 tomcat 中找到会话,msm 现在备份会话。

如果 nginx 代理了两个配置为 cookies=“false” 的 tomcat,
第一次请求,nginx 代理到 TomcatA,登录成功,响应 sessionid(TomcatA),但是 msm 没有将它备份到 memcached,
下一个请求,nginx 代理到 TomcatB sessionid(TomcatA) 在 url 中,tomcat 或 memcached 中没有 session,所以 TomcatB 创建一个新的 session,
第三个请求,使用 sessionid(TomcatB 的新 session) 到 TomcatA 的 nginx 代理。
因此,它始终保持并共享两个tomcat 之间的会话。

解决方法是删除tomcat中cookies=“false”的配置。

于 2013-04-07T06:01:09.530 回答