最近启用二级域名后,面临一个主域名与二级域名之间 session 不能共享的问题,带来的麻烦就是用户在主域名登录,但因为二级域名 session 不能共享,所以没法进行登录的操做,对一些功能有一些影响。html
问题的缘由以下:
Tomcat 下,不一样的二级域名,Session 默认是不共享的,由于 Cookie 名称为 JSESSIONID 的 Cookie 根域是默认是没设置的,访问不一样的二级域名,其 Cookie 就从新生成,而 session 就是根据这个 Cookie 来生成的,因此在不一样的二级域名下生成的 Session 也不同。
找到了其缘由,就可根据这个缘由对 Tomcat 在生成 Session 时进行相应的修改。apache
快速解决方案1:
在项目的/MET-INF/ 目录下建立一个 context.xml 文件,内容为:tomcat
1 2 |
<?xml version="1.0" encoding="UTF-8"?> <Context useHttpOnly="true" sessionCookiePath="/" sessionCookieDomain=".XXXX.com" /> |
Done!session
快速解决方案2:修改 Tomcat 的 server.xml 文件,内容为:dom
1 |
<Context path="" docBase="ROOT" reloadable="false" useHttpOnly="true" sessionCookiePath="/" sessionCookieDomain=".XXXX.com" /> |
Done!spa
以上两种方案的详细讲解见:http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
快速解决方案3:生成一个叫作 crossSubdomainSessionValve.jar 的文件,用的时候放在 Tomcat lib 目录下,而后修改 Tomcat server.xml 文件:server
1 |
<Valve className="me.seanchang.CrossSubdomainSessionValve" /> |