19 讓我知道你是誰:HTTP的Cookie機制

  1. Cookie 是服務器委託瀏覽器存儲的一些數據,讓服務器有了“記憶能力”;
  2. 響應報文使用 Set-Cookie 字段發送“key=value”形式的 Cookie 值;
  3. 請求報文裏用 Cookie 字段發送多個 Cookie 值;
  4. 爲了保護 Cookie,還要給它設置有效期、作用域等屬性,常用的有 Max-Age、Expires、Domain、HttpOnly 等;
  • Cookie 的生存週期

Max-Age 優先級大於 Expires

“Expires”俗稱“過期時間”,用的是絕對時間點,可以理解爲“截止日期”(deadline)。“Max-Age”用的是相對時間,單位是秒,瀏覽器用收到報文的時間點再加上 Max-Age,就可以得到失效的絕對時間。

  • Cookie 的作用域

“Domain”和“Path”指定了 Cookie 所屬的域名和路徑,瀏覽器在發送 Cookie 前會從 URI 中提取出 host 和 path 部分,對比 Cookie 的屬性。如果不滿足條件,就不會在請求頭裏發送 Cookie。

  • Cookie 的安全性

屬性“HttpOnly”會告訴瀏覽器,此 Cookie 只能通過瀏覽器 HTTP 協議傳輸,禁止其他方式訪問,瀏覽器的 JS 引擎就會禁用 document.cookie 等一切相關的 API,腳本攻擊也就無從談起了。

另一個屬性“SameSite”可以防範“跨站請求僞造”(XSRF)攻擊,設置成“SameSite=Strict”可以嚴格限定 Cookie 不能隨着跳轉鏈接跨站發送,而“SameSite=Lax”則略寬鬆一點,允許 GET/HEAD 等安全方法,但禁止 POST 跨站發送。

還有一個屬性叫“Secure”,表示這個 Cookie 僅能用 HTTPS 協議加密傳輸,明文的HTTP 協議會禁止發送。但 Cookie 本身不是加密的,瀏覽器裏還是以明文的形式存在。

Chrome 開發者工具是查看 Cookie 的有力工具,在“Network-Cookies”裏可以看到單個頁面 Cookie 的各種屬性,另一個“Application”面板裏則能夠方便地看到全站的所有
Cookie。

image

  1. Cookie 最基本的用途是身份識別,實現有狀態的會話事務。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章