cookie

cookie:HTTP最初是一個匿名、無狀態的協議,Web 服務器幾乎沒有什麼信息可以用來判定是哪個用戶發送的請求,cookie 就是一些數據,用來存儲會話信息,識別用戶, 實現持久會話。

一、cookie的字段

字段有:[name] [value] [domain] [path] [expires/max-age] [size] [http] [secure] [sameSite]

name:存儲在cookie中變量的名稱。

value:存儲在cookie中變量的值。

domain:域,cookie 對於哪個域是有效的。所有向該域發送的請求中都會包含這個 cookie 信息。

path:對於指定域中的那個路徑,可以訪問cookie;應該向服務器發送 cookie。如果同域不同路徑,就不能訪問該cookie。

expires:表示 cookie 何時應該被刪除的時間戳。這個值是個 GMT 格式的日期,用於指定應該刪除cookie 的準確時間。expires屬性設置可能會出現誤差,因爲服務器時間與客戶端時間可能不同。

max-age:默認單位是秒,用於規定n秒後Cookie過期。max-age的優先級比expires高,如果同時設置expires與max-age屬性,那麼max-age屬性會生效。

size:此cookie的大小。

http:僅在HTTP層面上傳輸的cookie,設置了httpOnly後,客戶端無法讀寫該cookie,能有效防禦XSS攻擊獲取cookie。

secure:設置了secure標誌的cookie僅在HTTPS層面上安全傳輸,如果請求的是HTTP,則不會發送這個cookie。設置了secure標誌的cookie 客戶端腳本是可以讀寫該cookie的。

sameSite:SameSite是Cookie最新增加屬性,用於限制第三方Cookie,防止 CSRF 攻擊和用戶追蹤。屬性值有Strict,禁用任何第三方請求Cookie;Lax,對於第三方異步請求,則禁止第三方Cookie,對於第三方同步且是GET請求,則不禁止第三方Cookie;None,對於第三方請求的Cookie不做任何限制。

注意:域、路徑、失效時間和 secure 標誌都是服務器給瀏覽器的指示,以指定何時應該發送 cookie。這些參數並不會作爲發送到服務器的 cookie 信息的一部分,只有 name 和 value 纔會被髮送。
 

二、cookie的類型

cookie分爲 會話cookie 持久化cookie

會話cookie(內存cookie):臨時cookie,沒設置過期時間,當用戶退出瀏覽器cookie從內存中銷燬。

持久化cookie:設置了過期時間,cookie存儲在硬盤中,直到過期。

 

三、cookie的限制

1、數量限制

每個域的 cookie 總數是有限的,而且不同的瀏覽器之間限制數不同。大多數瀏覽器每個域能有50個cookie,當超過單個域名限制之後還要再設置 cookie,瀏覽器就會清除以前設置的 cookie。

2、尺寸限制

瀏覽器中對於 cookie 的尺寸也有限制。大多數瀏覽器都有大約 4096B(加減 1)的長度限制。如果嘗試創建超過最大尺寸限制的 cookie,那麼該 cookie 會被丟掉。

由於cookie會隨着每次HTTP請求頭信息一起發送,所以在 cookie 中存儲大量信息會影響到特定域的請求性能,cookie 信息越大,完成對服務器請求的時間也就越長。

 

四、JavaScript中的cookie

1、讀取cookie

let c = document.cookie;
console.log( c );

2、創建cookie

設置cookie字段中的屬性。

document.cookie="user=Hello world"; 
document.cookie="username=hello; expires=Thu, 18 Dec 2020 12:00:00 GMT"; //設置了過期時間的

3、修改cookie

覆蓋舊的cookie即可。

document.cookie="user=Hello world2"; 

4、刪除cookie

 設置過期時間爲過去的時間即可。

document.cookie="user=Hello world2; expires=Thu, 18 Dec 2017 12:00:00 GMT"; 
發佈了45 篇原創文章 · 獲贊 3 · 訪問量 7298
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章