- 問題描述
本地用同一個tomcat調試兩個相同框架的不同項目,在同一個瀏覽器界面里切換時,A項目的登錄會把B項目的登錄給踢掉,翻反過來亦如此。通過查看瀏覽器cookie,發現兩個項目的cookie完全一模一樣,只是值不同而已。
- 原因解析
通過查詢資料大致可以了解到,如果是首次登錄,服務器會創建sessionId返回給瀏覽器,瀏覽器會將sessionId保存為JSessionId,下次發起訪問的時候會把sessionId帶上,服務器通過判斷是否存在sessionId,如果不存在則跳轉登錄頁,存在則進行業務操作。所以A項目登錄之后B項目接着去登陸,服務器返回給B項目一個新的sessionId,瀏覽器獲取到之后會覆蓋掉A項目的,等到A發起下次請求的時候,把覆蓋掉的sessionId發送給服務器,服務器檢測不到該sessionId,會以為sessionId已經過期,所以重定向到登錄頁。 - 解決方法
方法一
設置不同域名,可以設置兩個項目的域名不同,也就是區分到不同服務器上。
如:http://projectA.com:7777/
http://projectB.com:8080/
方法二
設置不同的應用名稱,不是通過根路徑的方式訪問(未驗證過)
如:http://ip1:7777/projectA
http://ip1:8080/projectB
方法三
設置cookie的別名
1、通過在contex中設置:
<Context sessionCookieName="jss" >
2、或者通過java虛擬機參數
-Dorg.apache.catalina.SESSION_COOKIE_NAME=jss
3、或者動過設置:
System.setProperty("org.apache.catalina.SESSION_COOKIE_NAME", "jss");