Tomcat二級域名共享Session

從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

相關文章
相關標籤/搜索