從Tomcat 6.0.20版本後二級域名session共享問題不用修改源代碼了tomcat
Configuration is done by editing META-INF/context.xml session
<Context sessionCookiePath="/something" sessionCookieDomain=".domain.tld" /> app
Applies to 6.0.20.dom
啓用二級域名後,面臨一個主域名與二級域名之間 session 不能共享的問題,server
帶來的麻煩就是用戶在主域名登錄,但因爲二級域名 session 不能共享 ,xml
所以沒法進行登錄的操做,對一些功能有一些影響。部署
問題的緣由以下:Tomcat下,不一樣的二級域名,Session默認是不共享的,由於Cookie名稱爲JSESSIONID的Cookie域名
根域是默認是沒設置的,訪問不一樣的二級域名,其 Cookie 就從新生成,而 session 就是根據這個 Cookie 來生成的,it
因此在不一樣的二級域名下生成的 Session 也不同。 io
找到了其緣由,就可根據這個緣由對 Tomcat 在生成 Session 時進行相應的修改。
例如:<Context sessionCookiePath="/" sessionCookieDomain=".domain.com" />
這樣就解決session的domain問題了,而不須要修改tomcat源代碼,或者增長valve等相對複雜的手法。
配置Context除了在server.xml或者conf/Catalina/localhost中,
現在6版本也能夠在具體的app的目錄中建立context.xml文件來配置,路徑以下/META-INF/context.xml
方案1、在項目的/MET-INF/ 目錄下建立一個 context.xml 文件,內容爲:
<?xml version="1.0" encoding="UTF-8"?> <Context useHttpOnly="true"
sessionCookiePath="/" sessionCookieDomain=".XXXX.com" />
方案2、修改 Tomcat 的 server.xml 文件,內容爲:
<Context path="" docBase="ROOT" reloadable="false" useHttpOnly="true"
sessionCookiePath="/" sessionCookieDomain=".XXXX.com" />
tomcat6之後,不推薦方案二,由於這樣沒法進行熱部署,修改server.xml必需要重啓tomcat
方案三:$CATALINA_BASE/conf/context.xml
這種將對同一個tomcat下的全部應用生效
方案四: $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml
例如:D:\Tomcat6.0\conf\Catalina\Localhost\context.xml
這種是對同一host下全部應用生效
方案一和方案四修改context.xml後會自動從新加載應用
值得注意的是,這幾種方案同時使用是有優先順序的,
一、$CATALINA_BASE/conf/context.xml
二、D:\Tomcat6.0\conf\server.xml
三、D:\Tomcat6.0\conf\Catalina\Localhost\appname.xml
四、/MET-INF/context.xml