Weblogic两个域 session冲突

转自:http://hi.baidu.com/576699909/blog/item/9d93db1fe0cdc2e01ad57659.htmlhtml

在将LWAP开发的应用迁移为Oracle ADF来开发的过程当中,LWAP和ADF应用都部署在同一个Weblogic服务器的两个Domain下,web

当在IE中首先访问ADF应用,而后再另一个标签页中访问LWAP应用,就会发现ADF应用出现问题,就会发现session丢失。服务器

问题是因为客户端访问ADF应用时,对应的Weblogic域会保留一个名为JSessionId的Cookie,记录ADF域的信息,JSessionId为cookie

Weblogic cookie-name的默认值,而当再次访问LWAP时,客户端Cookie中的JSessionId的值被LWAP的域修改了,此时再次访问session

以前的ADF应用就会致使Session丢失。dom

网上能够找到关于这个问题的解决方案:google

1,设置web应用的Cookie名称,让它们拥有不一样的JSessionIdspa

在LWAP和ADF的weblogic.xml文件添加以下属性3d

<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>HADFCookie</param-value>
</session-param>
</session-descriptor>code

2,一个应用使用IP来访问,另一个应用使用域名来访问

1、现象:

在WebLogic中,有两个不一样域A(端口:9000)和B(端口:8000),应用CA在域A中,应用CB在域B中,进行以下操做:

一、先登陆应用CA,再登陆应用CB,而后,切换回应用CA,发现应用CA的Session丢失;

二、应用CA中有指向应用CB的连接,登陆应用CA,点击指向应用CB的连接,应用CA的Session丢失;

2、缘由:

因Cookie冲突致使Session丢失。

Cookie的覆盖机制:若是一个新的cookie与一个已存在的cookie的NAME、Domain和Path属性值均相同,则旧的cookie会被丢弃。(参考:http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_cookies

WebLogic的Cookie相关配置:

属性名

默认值
cookie-name JSESSIONID 如未设置,默认为“JSESSIONID”
cookie-path NULL 如未设置,默认为“/”
cookie-domain NULL 如未设置,默认为发放cookie的服务器的域

因为没有在Weblogic.xml配置文件中对cookie的相关属性值进行配置,所以应用CA和应用CB的cookie的Name、Domain和Path属性值均为默认值,即Name为JSESSIONID,Path为“/”,Domain为服务器的IP地址,三个属性值均相同,这就形成了应用CA的cookie与应用CB的cookie会互相覆盖,从而致使相应应用的session丢失。

3、解决办法:

在Weblogic.xml配置文件中增长Cookie的相应属性值的配置:

方法1:设置各应用的cookie的Name属性为不一样值

方法2:设置各应用的cookie的Path属性为不一样值(cookie的Path属性值需与context-root值保持一致,context-root若未在Weblogic.xml中指定则默认为部署的WAR包名或文件夹名,若同一Weblogic服务器不一样域中的两应用context-root相同,则此方法不可行)

附注:虽然问题是在WebLogic下的不一样域部署应用进行互访的状况下发现的,可是,从问题产生的缘由来看,在同一个域中的不一样应用的互访,若是未作cookie相关属性值的配置,也会出现cookie冲突的问题。