0

尽管从我的角度来看,使用 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

提前致谢

问候

4

1 回答 1

0

纯粹使用配置可以做的最好的事情是设置引擎的 jvmRoute 属性,它将常量值添加到会话 ID 的末尾。大多数负载均衡器都可以处理。它看起来像:

JSESSIONID=as8sd9787ksjds9d8sdjks89s898.route1

如果这还不够好并且您需要WebServerSID=1001,则必须编写一个 ServletFilter 并将其配置为在每个响应上添加标头。

于 2012-05-16T18:54:39.203 回答