Response中set-cookie里的值不能寫入瀏覽器Request中Cookie的原因


今天在做驗證碼時發現一個問題:A、B窗口都打開同一個頁面,A先生成一個驗證碼,B再生成驗證碼,這時A所生成的驗證碼被B覆蓋掉了。原因是使用了同名的cookie來存儲驗證碼。一時找不到解決方法就參考了WebQQ的登錄畫面,發現tx也沒有解決這個問題,也許是覺得這個不算是問題吧。但還是借這個機會再次了解一下cookie好了。

  下面是在網上學習一番后得到的總結(如有紕漏請指正):

  1.domain表示的是cookie所在的域,默認為請求的地址,如網址為www.test.com/test/test.aspx,那么domain默認為www.test.com。而跨域訪問,如域A為t1.test.com,域B為t2.test.com,那么在域A生產一個令域A和域B都能訪問的cookie就要將該cookie的domain設置為.test.com;如果要在域A生產一個令域A不能訪問而域B能訪問的cookie就要將該cookie的domain設置為t2.test.com。

  2.path表示cookie所在的目錄,asp.net默認為/,就是根目錄。在同一個服務器上有目錄如下:/test/,/test/cd/,/test/dd/,現設一個cookie1的path為/test/,cookie2的path為/test/cd/,那么test下的所有頁面都可以訪問到cookie1,而/test/和/test/dd/的子頁面不能訪問cookie2。這是因為cookie能讓其path路徑下的頁面訪問。

  3.瀏覽器會將domain和path都相同的cookie保存在一個文件里,cookie間用*隔開。

  4.含值鍵值對的cookie:以前一直用的是nam=value單鍵值對的cookie,一說到含多個子鍵值對的就蒙了。現在總算弄清楚了。含多個子鍵值對的cookie格式是name=key1=value1&key2=value2。可以理解為單鍵值對的值保存一個自定義的多鍵值字符串,其中的鍵值對分割符為&,當然可以自定義一個分隔符,但用asp.net獲取時是以&為分割符。

 

請求響應頭中的set-cookie的值不能寫入瀏覽器cookie中。

解決的辦法是,響應頭中的 cookie 是帶有 domain 屬性的(domain=0.0.1),而從 Request URL 中可以看到,我們發起請求的域名是 leyou.com,請求和響應的 domain 不匹配,瀏覽器就幫你自動忽略了。

然后在后端進行修改,並設置了nginx中的頭信息,解決了這一問題。

最近在項目中出現一個問題,A項目是一個老項目,B項目為spring cloud中的微服務。B項目在登陸后response中返回set-cookie字段為JSESSIONID=xxxxxxxxx;PATH=/。這樣一來導致同域下的A項目登陸不但有自己的一個JSESSIONID還會帶有B項目登錄后返回的JSESSIONID,這樣導致了A項目無法正確拿到登錄信息,一直重定向單點登錄。
查了一下原因:

JSESSIONID
查了一下JSESSIONID是哪里來的,這個東西是登錄后第一訪問后台項目時,容器給的一個會話標識,用來表示哪台機器用哪個用戶進行登錄的。每次訪問的時候在cookie中帶着。

PATH
PATH為cookie中的一個屬性,表示該cookie能用於那個項目。例如:PATH=/A/,只有A系統使用該cookie信息。不同的容器默認設置PATH值有些不同,如果時tomcat容器,默認后台返回的set-cookie中PATH為項目名稱。例如:A項目就為PATH=/A/。

原文鏈接:

https://blog.csdn.net/lianlin21212411/article/details/94739140

https://blog.csdn.net/qq_36561105/article/details/85409777

https://www.cnblogs.com/chris-oil/p/3869803.html


免責聲明!

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



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