方案1.手動設置Cookie的Domain和Path(適用於同域或同IP的多項目 或 同NGINX代理的多個項目)
首先要了解Cookie作用域,這里就用到了cookie的兩個屬性 domain,path。當請求與cookie的域名相同且作用路徑相同的時候,瀏覽器才會攜帶cookie才可以實現cookie共享。domain 這個屬性可以設置cookie的作用域名,path可以設置cookie的作用路徑。cookie丟失時考慮其域名,路徑,有效期,是否和當前請求匹配
現在有A,B兩個項目,我希望在a項目登錄后在b也能保持登錄狀態就需要把用戶信息存入cookie,那這時候b就要獲取a的cookie,首先項目域分別是a.test.com和b.test.com沒有(域名是要給domain賦值用的)所以沒有域名的話去修改下host文件把 a.test.com [a項目ip],b.test.com [b項目ip]
//登錄后把用戶信息寫入cookie,我這里是存進去一個token值這里就當做token=user1
Cookie user_cookie = new Cookie("token","user1");
//設置cookie的domain這里注意寫的是主域名
//(a.test.com,b.test.com的主域名就是.test.com。若有NGINX代理,則可以設置為NGINX的域名)
//寫入這個參數之后所有主域名為.test.com的項目都可以調用這個cookie
user_cookie.setDomain(".test.com"); //IP也可以
//設置cookie的path
//path這里直接寫 / 表示所有路徑都可以訪問
user_cookie.setPath("/");
//過期時間s (默認是-1 關閉瀏覽器失效)
user_cookie.setMaxAge(60*60);
//HttpServletResponse 返回cookie
response.addCookie(user_cookie);
這個時候去瀏覽器查看你的cookie你會發現展示的domain和path都是你設置的了。就這樣就可以實現cookie共享了
這個方法簡單但是有一個弊端 就是你的項目必須是同一個主域名才可以。
或是Nginx作為主域名代理,欺騙瀏覽器攜帶cookie,nginx再轉發給后端各個項目。但是無法保證第三方JAR中都這樣設置Cookie。
經測試SESSIONID的路徑默認就是"/",只要域名相同全路徑攜帶,可以直接共享