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

相关文章
相关标签/搜索