对于Web应用程序,我们依赖于部署在tomcat上部署的Web逻辑和Web应用程序上的CMS。当用户访问页面时,动态内容从tomcat(启用粘性会话)呈现,静态内容(js,css等)从CMS呈现(在Web逻辑上)。这导致JSESSIONID cookie发生冲突。 Web逻辑JSESSIONID覆盖了Tomcat JSESSIONID,当用户移动到站点的各个部分时,用户正在丢失会话中保存的内容。
请求流程如下
[1]:http://i.stack.imgur.com/17Ft5.png
作为创可贴,我们在负载均衡器上编写了一条规则,为所有来自CMS的响应删除JSESSIONID。
虽然它有效,但仍在寻找更好的方法来解决这个问题。
答案 0 :(得分:0)
为什么您的CMS正在设置Cookie?是否需要会话来提供这些文件?
通常静态文件不需要会话。应该允许它们缓存在代理和客户端上。
正确配置您的CMS。如果它是一个Web应用程序,您可以添加一个过滤器,从其响应中删除Set-Cookie标头(就像您在LB上一样)。
可以更改会话cookie的名称。这可以使用遵循Servlet 3.0(或更高版本)规范的Web应用程序中的web.xml中的<session-config>/<cookie-config>/<name>
元素进行配置。
(它也可以在META-INF / context.xml中的Context元素上配置为sessionCookieName
属性,但建议使用web.xml。
请注意,Cookie可以具有Path属性。如果Cookie的路径与请求的URL不匹配,则浏览器不会发送cookie。带路径的Cookie:/ web和Path:/ content可以愉快地共存在一起。
Tomcat支持具有多个JSESSIONID cookie的请求。它只选择与现有会话匹配的那个。所有其他人都被忽略了。