最近啓用二級域名後,面臨一個主域名與二級域名之間 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" /> |