相同域名下的cookie污染


  • 問題描述

   本地用同一個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");

     

     

     


免責聲明!

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



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