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子对象替换的情况,也就是会话乱串。

 

posted @ 2013-05-21 14:40  卡卡。冰  阅读(1539)  评论(0编辑  收藏  举报