Cookies 设置Tomcat 7 sessionid和值,以便通过会话亲和性的硬件负载平衡进行标识

Cookies 设置Tomcat 7 sessionid和值,以便通过会话亲和性的硬件负载平衡进行标识,cookies,session-cookies,tomcat7,setcookie,jsessionid,Cookies,Session Cookies,Tomcat7,Setcookie,Jsessionid,虽然从IIS的角度来看很容易做到,但我对Tomcat完全不了解,不知道如何为cookie内容设置静态值。是的,我已经阅读了安全含义,最终将通过SSL访问,所以我不担心。另外,我已经阅读了Servlet3.0规范中关于不更改值的内容,我接受这一点 在IIS中,我只需将名为set Cookie的HTTP头设置为WebServerSID的任意设置和1001的值 然后,在包含这组真实服务器的负载平衡器VIP中,将值WebServerSID设置为VIP级别,对于第一个web服务器,cookie值为1001

虽然从IIS的角度来看很容易做到,但我对Tomcat完全不了解,不知道如何为cookie内容设置静态值。是的,我已经阅读了安全含义,最终将通过SSL访问,所以我不担心。另外,我已经阅读了Servlet3.0规范中关于不更改值的内容,我接受这一点

在IIS中,我只需将名为set Cookie的HTTP头设置为WebServerSID的任意设置和1001的值

然后,在包含这组真实服务器的负载平衡器VIP中,将值WebServerSID设置为VIP级别,对于第一个web服务器,cookie值为1001,对于服务器2,剩余机器为1002;对于服务器3,设置值为1003

在客户端关闭浏览器之前,通过cookies实现会话关联

如何使用Tomcat 7.0.22实现这一点

我看到Tomcat6.x和7.x之间在cookies及其设置方面发生了大量配置更改。经过广泛的研究,我尝试了以下方法 在过去的一周里

在web.xml中:这将禁用Tomcat 7.x下的URL重写 默认会话元素下的COOKIE

在context.xml中:cookies默认为true,但我是显式的,因为我无法让它工作

cookies=true
sessionCookiePath=/
sessionCookieName=WebServerSID
sessionCookieName=1001
我在context.xml中有两个sessionokiename条目,因为Tomcat 6.x中的等效命令看起来已经合并为1。 看

摘录:

org.apache.catalina.SESSION\u COOKIE\u NAME系统属性:此属性已被删除。通过在CATALINA_BASE/conf/context.xml中为global context.xml配置sessionokiename属性,可以获得等效的效果。 org.apache.catalina.SESSION_PARAMETER_NAME系统属性:该属性已被删除。通过在CATALINA_BASE/conf/context.xml中为global context.xml配置sessionokiename属性,可以获得等效的效果

如果这是不对的,那么我就是不理解所需的语法,我找不到任何地方可以简单地用黑白拼出来

在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

提前谢谢


关于

仅通过配置,最好设置的jvmRoute属性,该属性将向会话ID的末尾添加常量值。大多数负载平衡器都可以处理该问题。它看起来像:

JSESSIONID=as8sd9787ksjds9d8sdjks89s898.route1


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

我确实查看了jvmRoute组件,但不愿意尝试它。原因是我在负载平衡器文档中找不到任何东西表明sessionid组件将被忽略,而只读取定义部分route1。我发现我能做的就是将jvmRoute设置为1001。这将留下JSSessionID=.1001,但我无法让SessionOkiename=WebServerSID发挥它的作用。它根本不起作用,只是出了点问题。这会让我得到WebServerSID=.1001和near-enough,在这个阶段已经足够好了,但是不行。我总是想知道我在这些问题上哪里出错了,这些条目有什么问题?sessionCookieName=WebServerSID sessionCookieName=1001负载平衡器文档给出的用于Cookie切换的JavaScript命令示例为SetCookieServerID,1,并参考RFC 2109。这对实现这一点有什么影响吗?我从哪里开始编写一个servlet呢?我完全不知道它,所以任何链接都应该是合适的。好吧,那么,这已经安静太久了。让某人按照Mark的建议编写一个Servlet过滤器要花多少钱?使用一些实现文档可以多快完成?