我正在将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。
将有问题的Web应用程序sessionCookieDomain的<Context>元素的属性设置为.mydomain.com(注意前导点,这非常重要)。这将允许网络浏览器在所有子域之间共享cookie。
sessionCookieDomain
<Context>
.mydomain.com
如果您实际上有多个webapp上下文,并且还希望在它们之间共享会话,则还需要将相关Webapp元素的sessionCookiePath属性设置<Context>为/。
sessionCookiePath
/
简而言之:
<Context sessionCookieDomain=".mydomain.com" sessionCookiePath="/">
对于Tomcat 6用户:请注意,这是Tomcat 6.0.27中引入的。对于那些无法升级的用户,您需要Valve修改cookie域,最终要与element中的emptySessionPathattribute 结合使用,以防您要共享会话的多个webapp上下文。<Connector>``/conf/server.xml
Valve
emptySessionPath
<Connector>``/conf/server.xml