tomcat:怪異的的session沖突


同一台服務器,運行兩個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-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>


免責聲明!

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



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