目錄
1 產生問題的配置
<session-param>
<param-name>CookieName</param-name>
<param-value>TestSessionID</param-value>
</session-param>
我們發現如果兩個web應用都使用同樣這個參數,互相訪問就會有session被覆蓋的問題
2 產生問題的原因
假如有倆個應用app1,app2同時部署在同一個域domain1中的同一個集羣中或則會同一個server中,客戶端在訪問app1時,這個server會在該客戶端保留一個名爲 JSessionID的Cookie,記錄了app1的信息,JSessionID爲Weblogic cookie-name的默認值,當同一個客戶端訪問app2時,該客戶端Cookie中JSessionID的值被app2刷新,此時如果在之前已經打開的IE中繼續訪問app1會發現Session丟失(JSessionID已經被server刷新!)。倆個cookies的名字相同,造成了訪問後一個應用覆蓋了前一個應用的cookies,因此,倆個應用部署在同一個server中會出現session被覆蓋的問題。
補充一點,如果這倆個應用部署在倆個域中的相同server中,也會出現上述問題。原因與上面相似。
3 解決辦法
(1)相關參數的解釋
(2)解決辦法一
修改各自應用的weblogic.xml,使cookies文件的名字不同
例如:
App1中的weblogic.xml文件修改爲
<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>myCookie1</param-value>
</session-param>
</session-descriptor>
App2中的weblogic.xml文件修改爲
<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>myCookie2</param-value>
</session-param>
</session-descriptor>
(3)解決辦法二
訪問App1時用IP來訪問,訪問App2時用域名來訪問。
(4)解決辦法三
不要使用CookieName參數,默認的cookies名字即爲JSESSIONID,因爲倆個應用的JSESSIONID肯定是不同的。
4 參考資料
http://www.blogjava.net/mark1207/archive/2008/04/01/190134.html
http://download.oracle.com/docs/cd/E13222_01/wls/docs81b/webapp/index.html
http://download.oracle.com/docs/cd/E13222_01/wls/docs81b/webapp/weblogic_xml.html#1038491
作者:小陳,新進入我的團隊,基本功紮實,善於學習。以極大的熱情開始自己的新工作。