問題描述
集成項(xiàng)目HT實(shí)施過程中碰到這樣的問題,本次集成是把兩個(gè)不同的應(yīng)用集成到同一個(gè)頁(yè)面框架下,部署方式為:
同一個(gè)Server ServerName = Server01,同一個(gè)
Weblogic,分別建立兩個(gè)Domain,Domain01(port-7001)和Domain02(port-7002),將應(yīng)用App1部署在Domain01,將應(yīng)用App2部署在Domain02,同時(shí)啟動(dòng)這兩個(gè)Domain,如果完全是默認(rèn)配置,單獨(dú)訪問兩個(gè)應(yīng)用是沒有問題的,但是在同一個(gè)客戶端如果訪問App1之后再訪問APP2會(huì)發(fā)現(xiàn)App1的Session丟失。
問題分析
客戶端在訪問App1時(shí),Domain01會(huì)在該客戶端保留一個(gè)名為 JSessionID的Cookie,記錄了Domain01的信息,JSessionID為
Weblogic cookie-name的默認(rèn)值,當(dāng)同一個(gè)客戶端訪問App2時(shí),該客戶端Cookie中JSessionID的值被Domain02刷新,此時(shí)如果在之前已經(jīng)打開的IE中繼續(xù)訪問App1會(huì)發(fā)現(xiàn)Session丟失(JSessionID已經(jīng)被Domain02刷新!)。
解決方案
第一種方案
在App1和App2的
weblogic.
xml文件添加如下屬性
<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>myCookie1</param-value>
</session-param>
</session-descriptor>
將 的值更改為不同于默認(rèn)值就可以
如果不添加這個(gè),那么客戶端的COOKIE中保存的SESSION ID的對(duì)象名字是JSESSIONID,來(lái)自同一個(gè)SERVER上面的應(yīng)用可能會(huì)造成這個(gè)SESSION ID的丟失,因?yàn)橹灰?span id="i8o00is" class="hilite1">WEBLOGIC產(chǎn)生的SESSION ID都是保存在這個(gè)名字的COOKIE中,這段配置就是把應(yīng)用中的這個(gè)名字換成我們私有的,避免和其它域中的應(yīng)用產(chǎn)生的JSESSIONID沖突。
第二種方案
訪問App1時(shí)用IP來(lái)訪問,訪問App2時(shí)用域名來(lái)訪問。
特別注意
如果應(yīng)用程序部署為Cluster的模式,將無(wú)法設(shè)定,否則部署時(shí)發(fā)生錯(cuò)誤。