转自:http://hi.baidu.com/576699909/blog/item/9d93db1fe0cdc2e01ad57659.html。html
在将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冲突的问题。