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衝突的問題。

相關文章
相關標籤/搜索