cookie 概述
cookie是服務(wù)器保存在瀏覽器端的一小段文本信息,每個cookie的大小一般不超過4KB。服務(wù)器給瀏覽器設(shè)置了cookie以后,瀏覽器沒錯向服務(wù)器發(fā)送請求時,就會附上cookie。每一個cookie都有對應(yīng)的域名和瀏覽器。
cookie是提供給HTTP協(xié)議使用的,可以通過HTTP協(xié)議傳送。
cookie 內(nèi)容
cookie 一般包括一下內(nèi)容
- cookie的名字
- cookie的值
- 到期時間
- 所屬域名 (默認當(dāng)前域名)
- 生效的路徑 (默認當(dāng)前網(wǎng)址)
cookie 作用
一般的cookie的用途有:
- 對話: 保存用戶登錄狀態(tài),購物車信息等
- 個性化:保存用戶的偏好設(shè)置,例如:字體大小,配色等
- 追蹤:記錄和分析用戶的行為
生成 cookie
服務(wù)器生成cookie是通過設(shè)置HTTP請求頭的Set-Cookie來設(shè)置的。Set-Cookie可以有多個。除了可以設(shè)置Cookie的值,還可以設(shè)置附加的Cookie的屬性,一個Set-Cookie字段,可以包括多個屬性,沒有次序要求。
附加的屬性有以下幾點:
- Expires=<date> (UTC格式的日期)
- Max-Age=<non-zero-digit> (最大失效時間,定義自設(shè)置
cookie開始后失效的秒數(shù)) - Domain=<domain-value> (指定域名,默認指當(dāng)前的一級域名)
- Path=<path-value> (指定路徑)
- Secure (一個帶有安全屬性的
cookie,只有在請求使用HTTPS和SSL協(xié)議時,才發(fā)送到服務(wù)器。) - HttpOnly (禁止JavaScript訪問
cookie,可以防范XSS跨站腳本攻擊)
Set-Cookie 語法
Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>
Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly
node.js 設(shè)置示例
response.setHeader('Set-Cookie',[`email=${user['email']}`,`Max-Age=${60*60*24*7}`]);
發(fā)送 cookie
在服務(wù)器給瀏覽器設(shè)置好cookie后,瀏覽器訪問服務(wù)器都會帶上相應(yīng)的cookie(滿足限制條件的前提下)。
服務(wù)器根據(jù)瀏覽器發(fā)送的cookie獲取用戶數(shù)據(jù),并返回給用戶,實現(xiàn)記住用戶的狀態(tài)等功能。
瀏覽器 訪問
瀏覽器可以通過document.cookie訪問當(dāng)前域名下的cookie,也可以通過這個屬性設(shè)置cookie。如果服務(wù)器設(shè)置了HttpOnly,那么就無法使用javascript來操作cookiel。
總結(jié)
以上就是對在下對cookie的簡單的理解,要想深入的了解還是需要動手操作的。本文參考來一些網(wǎng)上的開源文章(阮老師的Cookie,MDN的開源文檔)。
文中有認識不正確的地方,歡迎指正(可以發(fā)送郵件到本人郵箱『1398988546@qq.com』),轉(zhuǎn)載請注明文章來源。