一個服務器上搭建了多個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的丟失。 linux
解決方法: web
方法1:將不一樣的多個應用服務在不一樣的虛擬主機中,或者映射不一樣的IP進行部署。 apache
方法2:對應tomcat服務處理方式:修改coocie的名稱保證cookie不重複,即jsessionid的不重稱,保證ip相同下sessioncookiename域名不一樣。 瀏覽器
一、tomcat5修改方法 tomcat
在啓動項中增長org.apache.catalina.SESSION_COOKIE_NAME參數 服務器
linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘ cookiewin
set JAVA_OPTS=」-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname「 session
二、tomcat6和tomcat7修改方法相同 app
tomcat增長參數對全部Context生效,影響甚大,因此到之後的版本能夠就僅針對Context設置了
ssh
在Context容器標籤上增長sessionCookieName參數
3 、weblogic修改方法<Context path=」/」 docBase=」webapp」 reloadable=」false」sessionCookieName=」yoursessionname」></Context>
設置各個應用使用不一樣的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/