天天看點

同IP不同端口Session沖突問題同IP不同端口Session沖突問題

同IP不同端口Session沖突問題

分類: 

tomcat

2013-09-24 11:19 1146人閱讀 

評論

(0) 

收藏 舉報

     一個伺服器上搭建了多個tomcat或者weblogic,端口不一樣,同時啟動通路時session丢失。如:A,B兩個服務,在浏覽器中登入通路A後,目前打開的浏覽器上在開一個頁籤通路B服務後,回過來點選通路A時session丢失,需要重新登入A才可以通路。經過資料查找,發現問題是因為:IP相同認為是同一個域,接收了B的set-cookie指令,把對應的cookie内容覆寫了,其中包括jsessionid,造成A的session丢失。 如果IP不同,則不會發生這個問題。IP相同的兩個session對應的cookie是一樣的,而不幸的是sessionID就儲存在cookie中,這樣先通路A,再通路B的時候,B的sessionid會覆寫A的sessionid。這個事情沒辦法解決,是以你不要搞兩個端口,最好是搞兩個IP。原來都是cookie惹的禍,它不會區分端口,造成這多個站點不斷的後來的覆寫前面的,進而造成session的丢失。

        解決方法:

方法1:将不同的多個應用服務在不同的虛拟主機中,或者映射不同的IP進行部署。

方法2:對應tomcat服務處理方式:修改coocie的名稱保證cookie不重複,即jsessionid的不重稱,保證ip相同下sessioncookiename域名不同。

           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修改方法相同

       tomcat增加參數對所有Context生效,影響甚大,是以到以後的版本可以就僅針對Context設定了

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

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

          3、weblogic修改方法

          設定各個應用使用不同的cookie-name。

         weblogic的設定(設定不同的cookie-name):

         請在WEB-INF\Weblogic.xml添加如下代碼

                  <session-descriptor>       

                             <cookie-name>JSESSIONID1</cookie-name>   

                  </session-descriptor>  

http://blog.csdn.net/isshquery/article/details/8493231 http://blog.163.com/wendy_xiaoyue/blog/static/19040105120111114105829574/

繼續閱讀