1. 程式人生 > >同一瀏覽器下sessionid互相覆蓋的問題

同一瀏覽器下sessionid互相覆蓋的問題

Java Tomcat 分布式 sessionid 覆蓋

問題描述:

在一臺機器上安裝多個Tomcat,端口不一樣,這裏姑且分別稱為tomcat1 和 tomcat2,在兩個不同的Tomcat上部署了A和B兩個項目,兩個項目的代碼都是一樣的,只有項目名稱不同。啟動兩個Tomcat後,使用同一個瀏覽器分別訪問不同的Tomcat,出現sessionid互相覆蓋的情況。例如,訪問tomcat1時獲取的sessionid是123456,此時再去訪問tomcat2時會發現sessionid也是123456,但是tomcat2上並沒有這個sessionid,結果又返回一個新的sessionid回來,又進行了一個覆蓋,如此循環。

解決方案:

  • 方法一: tomcat6以上, 直接改下conf文件下的context.xml的 context標簽, 給每個tomcat的

    SessionCookieName=”JSESSIONID_1”設置一個名字(默認是JSESSIONID)

    <Context docBase="D:\Develop\Tomcat\apache-tomcat-7.0.40\wtpwebapps\poi" path="/poi"
    sessionCookiePath="/poi" sessionCookieDomain="*.baikeyang.com" sessionCookieName="POI_SESSIONID"
    reloadable="false" caseSensitive="false" crossContext="true" source="org.eclipse.jst.jee.server:poi"/>
    • sessionCookieName:用於為此上下文創建的所有會話Cookie的名稱。 如果設置,則會覆蓋Web應用程序設置的任何名稱。 如果未設置,則使用Web應用程序指定的值(如果有),如果Web應用程序未明確設置,則使用名稱JSESSIONID。
  • 方法二:在tomcat的conf目錄下,修改catalina.properties配置。在catalina.properties加上一句 ,這樣sessionid的名稱就是MYSESSIONID了:

    org.apache.catalina.SESSION_COOKIE_NAME=MYSESSIONID
  • 方法三:自己手動編寫代碼去生成sessionid,不去使用Tomcat生成的,但是這個生成的sessionid必須是唯一的,最簡單的方式就是使用uuid之類的。

同一瀏覽器下sessionid互相覆蓋的問題