在2个子域之间共享会话数据

我使用tomcat 7.0.6与jdk 1.6.0_22

是否可以使用公共子域(例如a.mydomain.com和b.mydomain.com)在两个不同的域之间共享会话数据?

使用默认的java servlet,a.mydomain.com和b.mydomain.com会获得不同的会话,但是无法为mydomain.com中的所有子域创建共享会话吗?

问题是我不直接控制commen子域(mydomain.com)所以我不能从mydomain.com服务任何servlet

将有问题的webapp的元素的sessionCookieDomain属性设置为.mydomain.com (注意前导点,这非常重要)。 这将允许webbrowser在所有子域之间共享cookie。

如果您实际上有多个webapp上下文并且您想要在它们之间共享会话,那么您还需要将有问题的webapps的元素的sessionCookiePath属性设置为/

简而言之:

  

也可以看看:

  • Tomcat 7配置参考 – Context容器

对于Tomcat 6用户:请注意,这是在Tomcat 6.0.27中引入的。 对于那些无法升级的人,您需要一个Valve来修改cookie域,最后结合/conf/server.xml元素中的emptySessionPath属性,以便您拥有多个webapp上下文我想分享会议。

Servlet Spec 3.0(这是Tomcat 7支持的)通过在SessionCookieConfig上调用setDomain来实现这一点。

详情请访问: http : //download.oracle.com/javaee/6/api/javax/servlet/SessionCookieConfig.html

您可以使用ServletContextListner在webapp初始时以编程方式获得SessionCookieConfig – 或者您应该能够在web.xml中将其设置为值。

您可以使用cookie创建自己的会话实现。 使用cookie和服务器端数据库或文件处理会话(在大多数服务器端语言中)。 您创建一个令牌(在时间戳上使用md5)并将其与所有会话变量一起保存在文件或数据库中。