同一台服務器,運行兩個tomcat-6.0.32,但是使用不同的端口,如果兩個應用都使用localhost訪問,則會產生session丟失現象,如果一個使用localhost,一個使用真實IP或者127.0.0.1,則不會產生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-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>