tomcat-Java加上ContextPath后Session失效 解决办法
2013-06-18 17:44
393 查看
参考:https://issues.apache.org/bugzilla/show_bug.cgi?id=48379
例如:<Context sessionCookiePath="/" sessionCookieDomain=".domain.com" />
方案一、在项目的/MET-INF/ 目录下创建一个 context.xml 文件,内容为:
Configuration is done by editing META-INF/context.xml <Context sessionCookiePath="/something" sessionCookieDomain=".domain.tld" /> Applies to 6.0.20. 启用二级域名后,面临一个主域名与二级域名之间 session 不能共享的问题, 带来的麻烦就是用户在主域名登陆,但由于二级域名 session 不能共享 , 因此无法进行登陆的操作,对一些功能有一些影响。 问题的原因如下:Tomcat下,不同的二级域名,Session默认是不共享的,因为Cookie名称为JSESSIONID的Cookie 根域是默认是没设置的,访问不同的二级域名,其 Cookie 就重新生成,而 session 就是根据这个 Cookie 来生成的, 所以在不同的二级域名下生成的 Session 也不一样。 找到了其原因,就可根据这个原因对 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
方案一、在项目的/MET-INF/ 目录下创建一个 context.xml 文件,内容为:
<?xml version="1.0" encoding="UTF-8"?> <Context useHttpOnly="true" sessionCookiePath="/" sessionCookieDomain=".XXXX.com" />方案二、修改 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后会自动重新加载应用 值得注意的是,这几种方案同时使用是有优先顺序的, 1、
$CATALINA_BASE/conf/context.xml
2、
D:\Tomcat6.0\conf\server.xml3、[/code]
D:\Tomcat6.0\conf\Catalina\Localhost\appname.xml
4、
/MET-INF/context.xml
相关文章推荐
- 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决
- tomcat启动时报错:Multiple Contexts have a path of "/iecsr".解决办法
- Java中tomcat memecached session 共享同步问题的解决办法
- Tomcat Multiple Contexts have a path of 错误的解决办法
- tomcat启动报错 Multiple Contexts have a path of /test的解决办法
- eclipse 启动 tomcat 报was not found on the java.library.path 错误的解决办法
- Java日记_17.9.01——点击按钮后,键盘监听失效的原因与解决办法
- idea端口被占用,启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
- windows下no swt-gtk-3550 or swt-gtk in swt.library.path, java.library.path or the jar的解决办法
- Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg';JAVA_HOME环境变量失效的解决办法
- Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法
- JAVA_HOME环境变量失效的解决办法
- JAVA_HOME环境变量失效的解决办法
- servlet [jsp] in context with path [解决办法
- session失效的解决办法
- 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
- session失效刷新后登录页面嵌入在iframe中的解决办法
- java出现no XXX in java.library.path的解决办法及eclipse配置
- 在ashx页面中context.Session["xxx"]获取不到值的解决办法
- JAVA_HOME环境变量失效的解决办法