相同域名下的cookie污染

  • 問題描述

   本地用同一個tomcat調試兩個相同框架的不一樣項目,在同一個瀏覽器界面裏切換時,A項目的登陸會把B項目的登陸給踢掉,翻反過來亦如此。經過查看瀏覽器cookie,發現兩個項目的cookie徹底如出一轍,只是值不一樣而已。java

  • 緣由解析
      經過查詢資料大體能夠了解到,若是是首次登陸,服務器會建立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的別名

      一、經過在contex中設置:
    apache

    <Context sessionCookieName="jss" >

      二、或者經過java虛擬機參數瀏覽器

    -Dorg.apache.catalina.SESSION_COOKIE_NAME=jss

      三、或者動過設置:tomcat

    System.setProperty("org.apache.catalina.SESSION_COOKIE_NAME", "jss");
相關文章
相關標籤/搜索