Websphere多個應用session相互覆蓋問題解決辦法


原文鏈接:http://my.oschina.net/moyuqi/blog/98475

使用apache反向代理解決在應用A使用Iframe嵌入應用B的功能而產生的跨域問題后,應用B的功能能正常使用了。但也產生了另外一個問題:打開應用A的任何頁面都會跳轉主頁,問題原因是:session丟失。

具體分析:

session是通過在客戶端生成一個cookie,所有請求會帶上這個cookie。一個cookie的NAME、Domain和Path屬性值均相同,則會覆蓋,若未設置Domain域,則域為ip(不包括端口),因此應用A的session被應用B的session覆蓋了。


 

經測試:tomcat、weblogic、websphere的session默認都是JSESSIONID 為key來識別的,因此在沒有特別設置下,同一個域下的多個應用session會互相覆蓋。 

解決辦法:

設置各個應用使用不同的cookie-name,或者將JSESSIONID的path路徑設置為不同。

1)WebLogic的Cookie相關配置:weblogic.xml

 

屬性名

默認值
cookie-name JSESSIONID 如未設置,默認為“JSESSIONID”
cookie-path NULL 如未設置,默認為“/”
cookie-domain NULL 如未設置,默認為發放cookie的服務器的域

 

示例代碼:  
1.  <session-descriptor2.  <session-param3.  <param-name>CookieName</param-name4.  <param-value>HADFCookie</param-value5.  </session-param6.  </session-descriptor>

 
          2. WebLogic如何設置session超時時間  http://tonyaction.blog.51cto.com/227462/201900
 
 

2)websphere的設置(設置不同JSESSIONID的path)

應用程序->企業應用程序-> [Application Server] ->
會話管理->1.覆蓋會話管理(需打鈎).
會話管理->2.啟用 cookie(需打鈎)->修改'Cookie路徑' 

 

3)Tomcat的設置(設置不同JSESSIONID的path)

修改tomcat/conf/server.xml: 

 

1.tomcat5修改方法

在啟動項中增加org.apache.catalina.SESSION_COOKIE_NAME參數

linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘

win
set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“

2.tomcat6和tomcat7修改方法相同

在Context容器標簽上增加sessionCookieName參數

<Context path=”/” docBase=”webapp” reloadable=”false” sessionCookieName=”yoursessionname”></Context>

還可以加上sessionCookiePath

<Context ... sessionCookiePath="/" > ... </Context>

延伸閱讀:tomcat修改jsessionid在cookie中的名稱 http://blog.shilimin.com/338.htm


小龍評論:WebSphere默認的AppSrv01下部署了兩個應用App1和App2,如果App1和App2都是用相同的平台開發,即用戶登錄之后都通過session和cookie把用戶登錄的信息管理起來,並且session和cookie中的參數名稱都是相同的,也會出現session覆蓋的問題,用轉載的方法即可解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM