weblogic 跨域访问引起的session丢失
首先,何为webloigc的跨域访问? weblogic的工作空间可以看作一个一个的域,可以理解平时用的tomcat都是在一个域目录下的。而weblogic的建立会给你建好一个域domains,当然你也可以在建其他的域。 我们的项目就用到了两个域,原因每个域都会有一个独立的访问端口,独立的运行内存,这样可以避免项目多出现内存溢出的现象。 那么何为跨域呢? 这里的跨域是说客户端浏览器同时访问了一个weblogic下的两个域项目s1、s2。 这样先访问项目s1的session就会被后访问项目s2的session替换,导致s1的session丢失! 为什么会被替换因为它们的session在服务器上的CookieName名字一样。 怎么解决这个情况呢?
可以在其中一个域中的项目weblogic.xml中配置该项目的CookieName,即session会话的名字:
<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>eos_JSessionID</param-value>
</session-param>
</session-descriptor>
经测试这样的代码是老版本的代码,与weblogic 10 不兼容,新版weblogic的格式为:
<jsp-descriptor>
<page-check-seconds>-1</page-check-seconds>
<verbose>true</verbose>
</jsp-descriptor>
<container-descriptor>
<servlet-reload-check-secs>-1</servlet-reload-check-secs>
</container-descriptor>
所以weblogic 10的 session控制代码应该是:
<session-descriptor>
<cookie-name>JSESSIONID1</cookie-name>
</session-descriptor>
为什么同一域下面的多项目不会出现session丢失了,而是出现session的替换。
我理解的是 不同域之间session会话,会保存在各自域中的JSESSIONID父对象中。 如果JSESSIONID名字一样,不同域之间的JSESSIONID就会互相替换。 替换之后就出现了丢失session。 而同一域下就一个JSESSIONID,所以不会出现丢失,而是会出现相同名字的session子对象替换的情况,也就是会话乱串。