使用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-descriptor> 2. <session-param> 3. <param-name>CookieName</param-name> 4. <param-value>HADFCookie</param-value> 5. </session-param> 6. </session-descriptor>
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
名稱: ?4C.ESL | .↗Evon
口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
mail: 聯系我