問題描述
集成項目HT實施過程中碰到這樣的問題,本次集成是把兩個不同的應用集成到同一個頁面框架下,部署方式為:
同一個Server ServerName = Server01,同一個
Weblogic,分別建立兩個Domain,Domain01(port-7001)和Domain02(port-7002),將應用App1部署在Domain01,將應用App2部署在Domain02,同時啟動這兩個Domain,如果完全是默認配置,單獨訪問兩個應用是沒有問題的,但是在同一個客戶端如果訪問App1之后再訪問APP2會發(fā)現(xiàn)App1的Session丟失。
問題分析
客戶端在訪問App1時,Domain01會在該客戶端保留一個名為 JSessionID的Cookie,記錄了Domain01的信息,JSessionID為
Weblogic cookie-name的默認值,當同一個客戶端訪問App2時,該客戶端Cookie中JSessionID的值被Domain02刷新,此時如果在之前已經(jīng)打開的IE中繼續(xù)訪問App1會發(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>
將 的值更改為不同于默認值就可以
如果不添加這個,那么客戶端的COOKIE中保存的SESSION ID的對象名字是JSESSIONID,來自同一個SERVER上面的應用可能會造成這個SESSION ID的丟失,因為只要是
WEBLOGIC產(chǎn)生的SESSION ID都是保存在這個名字的COOKIE中,這段配置就是把應用中的這個名字換成我們私有的,避免和其它域中的應用產(chǎn)生的JSESSIONID沖突。
第二種方案
訪問App1時用IP來訪問,訪問App2時用域名來訪問。
特別注意
如果應用程序部署為Cluster的模式,將無法設定,否則部署時發(fā)生錯誤。