尽管从我的角度来看,使用 IIS 很容易完成,但我对 Tomcat 完全是个菜鸟,并且不知道如何为 cookie 内容设置静态值。是的,我已经阅读了安全隐患,最终将通过 SSL 访问,所以我不担心。另外,我已经阅读了关于不更改值的 Servlet 3.0 规范,我接受了这一点。
在 IIS 中,我将简单地设置一个名为 Set-Cookie 的 HTTP Header,其 WebServerSID 的任意设置和值为 1001。
然后在包含这组真实服务器的负载平衡器 VIP 中,将值 WebServerSID 设置为 VIP 级别,并为第一个 Web 服务器设置 cookie 值 1001,以此类推,其余机器 1002 用于服务器 2,1003 用于服务器 3。
这通过 cookie 实现会话亲和性,直到客户端关闭浏览器。
Tomcat 7.0.22 如何做到这一点?
我看到在 Tomcat 6.x 和 7.x 之间发生了大量关于 cookie 及其设置方式的配置更改。经过上周的广泛研究,我尝试了以下方法。
在 web.xml 中:(这将在 Tomcat 7.x 下禁用 URL 重写)
<tracking-mode>COOKIE</tracking-mode>
在默认会话元素下
在 context.xml 中:(cookies 默认为 true,但我很明确,因为我无法让它工作)
cookies=true
sessionCookiePath=/
sessionCookieName=WebServerSID
sessionCookieName=1001
我在 context.xml 中有 2 个用于 sessionCookieName 的条目,因为来自 Tomcat 6.x 的等效命令看起来已经合并为 1 个。请参阅http://tomcat.apache.org/migration-7.html#Tomcat_7.0。 x_configuration_file_differences
提炼:
org.apache.catalina.SESSION_COOKIE_NAME 系统属性:这已被删除。通过为全局 context.xml(在 CATALINA_BASE/conf/context.xml 中)配置 sessionCookieName 属性可以获得等效的效果。org.apache.catalina.SESSION_PARAMETER_NAME 系统属性:这已被删除。通过为全局 context.xml(在 CATALINA_BASE/conf/context.xml 中)配置 sessionCookieName 属性可以获得等效的效果。
如果这不正确,那么我根本不理解所需的语法,而且我找不到任何可以简单地用纯黑白拼写出来的地方。
在 Tomcat 6.x 下,我会在配置中使用 Java 选项,例如:
-Dorg.apache.catalina.SESSION_COOKIE_NAME=WebServerSID
-Dorg.apache.catalina.SESSION_PARAMETER_NAME=1001
我正在使用的应用程序没有在其他地方设置任何这些值,所以它不是应用程序。
所有这些设置都在 Catalina 基地的 context/web/server.xml 文件中
在一天结束时,我需要在 Set-Cookies 下的响应标头中看到:(如使用 Fiddler 所见)是:
WebServerSID=1001
不是
JSESSIONID=as8sd9787ksjds9d8sdjks89s898
提前致谢
问候