我正在使用tomcat 7.0.6和jdk 1.6.0_22
是否可以使用公共子域(例如a.mydomain.com和b.mydomain.com)在2个不同的域之间共享会话数据?
使用默认的java servlet a.mydomain.com和b.mydomain.com会获得不同的会话,但是无法为mydomain.com中的所有子域创建共享会话吗?
问题还在于我没有直接控制commen子域名(mydomain.com)所以我无法从mydomain.com提供任何servlet
答案 0 :(得分:14)
将相关网络应用的sessionCookieDomain
元素的<Context>
属性设置为.mydomain.com
(注意前导点,这非常重要)。这将允许webbrowser在所有子域之间共享cookie。
如果您实际上有多个webapp上下文,并且您想要在它们之间共享会话,那么您还需要将所讨论的webapps的sessionCookiePath
元素的<Context>
属性设置为{{1 }}
简而言之:
/
对于Tomcat 6用户:请注意,这是在Tomcat 6.0.27中引入的。对于无法升级的用户,您需要<Context sessionCookieDomain=".mydomain.com" sessionCookiePath="/">
来修改Cookie域,最终与Valve
中emptySessionPath
元素中的<Connector>
属性结合使用你有多个你想要分享会话的webapp上下文。
答案 1 :(得分:3)
Servlet Spec 3.0(这是Tomcat 7支持的)通过在SessionCookieConfig上调用setDomain来实现这一点。
详细信息: http://download.oracle.com/javaee/6/api/javax/servlet/SessionCookieConfig.html
使用ServletContextListner在webapp初始时以编程方式获得SessionCookieConfig - 或者您应该能够在web.xml中将其设置为值。
答案 2 :(得分:0)
您可以使用Cookie创建自己的会话实施。使用cookie和服务器端数据库或文件处理会话(在大多数服务器端语言中)。您创建一个令牌(在时间戳上使用md5)并将其与所有会话变量一起保存在文件或数据库中。