目录
1 产生问题的配置
<session-param>
<param-name>CookieName</param-name>
<param-value>TestSessionID</param-value>
</session-param>
我们发现如果两个web应用都使用同样这个参数,互相访问就会有session被覆盖的问题
2 产生问题的原因
假如有俩个应用app1,app2同时部署在同一个域domain1中的同一个集群中或则会同一个server中,客户端在访问app1时,这个server会在该客户端保留一个名为 JSessionID的Cookie,记录了app1的信息,JSessionID为Weblogic cookie-name的默认值,当同一个客户端访问app2时,该客户端Cookie中JSessionID的值被app2刷新,此时如果在之前已经打开的IE中继续访问app1会发现Session丢失(JSessionID已经被server刷新!)。俩个cookies的名字相同,造成了访问后一个应用覆盖了前一个应用的cookies,因此,俩个应用部署在同一个server中会出现session被覆盖的问题。
补充一点,如果这俩个应用部署在俩个域中的相同server中,也会出现上述问题。原因与上面相似。
3 解决办法
(1)相关参数的解释
(2)解决办法一
修改各自应用的weblogic.xml,使cookies文件的名字不同
例如:
App1中的weblogic.xml文件修改为
<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>myCookie1</param-value>
</session-param>
</session-descriptor>
App2中的weblogic.xml文件修改为
<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>myCookie2</param-value>
</session-param>
</session-descriptor>
(3)解决办法二
访问App1时用IP来访问,访问App2时用域名来访问。
(4)解决办法三
不要使用CookieName参数,默认的cookies名字即为JSESSIONID,因为俩个应用的JSESSIONID肯定是不同的。
4 参考资料
http://www.blogjava.net/mark1207/archive/2008/04/01/190134.html
http://download.oracle.com/docs/cd/E13222_01/wls/docs81b/webapp/index.html
http://download.oracle.com/docs/cd/E13222_01/wls/docs81b/webapp/weblogic_xml.html#1038491
作者:小陈,新进入我的团队,基本功扎实,善于学习。以极大的热情开始自己的新工作。