Cookie學習

Huangy遠發表於2019-01-19

什麼是Cookie?

    Cookie是由W3C組織提出,最早由NetScape社群發展的一種機制。

    Cookie是儲存於訪問者的計算機中的變數。每當同一臺計算機通過瀏覽器請求某個頁面時,就會傳送這個cookie。

    Cookie的作用就是用於解決”如何記錄客戶端的使用者資訊”:

        ①當使用者訪問web頁面時,他的名字可以記錄在Cookie中。

        ②在使用者下一次訪問該頁面時,可以在Cookie中讀取使用者訪問記錄。

    Cookie實際上是一小段文字資訊(上限為4kb)。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器可以把Cookie儲存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給伺服器。伺服器檢查該Cookie,以此來辨認使用者狀態。服務還可以根據需要修改Cookie的內容。

Cookie的屬性

這是筆者著重注意講述的點

屬性名 說明
name Cookie的名稱,Cookie一旦建立,名稱便不可更改
value Cookie的值,如果值為Unicode字元,需要為字元編碼。如果為二進位制資料,則需要使用BASE64編碼。該值會在瀏覽器再次發起請求時,傳遞給伺服器
maxAge Cookie失效的時間,單位秒。如果為整數,則該Cookie在maxAge秒後失效。如果為負數,該Cookie為臨時Cookie,關閉瀏覽器即失效,瀏覽器也不會以任何形式儲存該Cookie。如果為0,表示刪除該Cookie。預設為-1。 該值可以在伺服器執行時動態設定
secure 該Cookie是否僅被使用安全協議傳輸。安全協議。安全協議有HTTPS,SSL等,在網路上傳輸資料之前先將資料加密。預設為false。 可以在伺服器執行時動態設定
path Cookie的使用路徑。如果設定為“/sessionWeb/”,則只有contextPath為“/sessionWeb”的程式可以訪問該Cookie。如果設定為“/”,則本域名下contextPath都可以訪問該Cookie。注意最後一個字元必須為“/”。該值只有在生成cookie的時候設定有效,後面設定無效。如果需要動態設定path,可以先利用maxAge屬性設定為0,把cookie刪除了,然後在重新生成cookie的時候,設定path(這時候記得把maxAge=0去掉)
domain 可以訪問該Cookie的域名。如果設定為“.google.com”,則所有以“google.com”結尾的域名都可以訪問該Cookie。設定規則同path屬性
comment 該Cookie的用處說明,瀏覽器顯示Cookie資訊的時候顯示該說明。
version Cookie使用的版本號。0表示遵循Netscape的Cookie規範,1表示遵循W3C的RFC 2109規範

Cookie的Domain屬性

我們重點說一下這個Domain屬性。一般在實現單點登入的時候會經常用到這個屬性,通過在父級域設定Cookie,然後在各個子級域拿到存在父級域中的Cookie值。比如剛才設定的username屬性,在blog.csdn.net下同樣可以訪問到,使用者不用重新登入就可以拿到第一次登入進來時候的使用者資訊,因為這些使用者資訊都是存在父級域”.csdn.net”下面,其他頁面也可以拿到。

當在”blog.csdn.net”這個域名下存入一個Cookie;如:
document.cookie = “blogCookie=blog;path=/;domain=.blog.csdn.net”;
然後你會發現在mp.csdn.net下看不到blogCookie這個屬性。這個就是所謂的Cookie跨域的問題。

總結:
domain表示的是cookie所在的域,預設為請求的地址,如網址為www.study.com/study,那麼domain預設為www.study.com。而跨域訪問,如域A為t1.study.com,域B為t2.study.com,那麼在域A生產一個令域A和域B都能訪問的cookie就要將該cookie的domain設定為.study.com;如果要在域A生產一個令域A不能訪問而域B能訪問的cookie就要將該cookie的domain設定為t2.study.com。注意:一般在域名前是需要加一個”.”的,如”domain=.study.com”。

參考:https://blog.csdn.net/longgeg…

相關文章