JavaScript 複習之 Cookie

Cookie 是服務器保存在瀏覽器的一小段文本信息,每一個 Cookie 的大小通常不能超過4k。瀏覽器每次向服務器發起請求,就會自動附上這段信息。瀏覽器

Cookie 主要用來分辨兩個請求是否來自同一個瀏覽器,以及用來保存一些狀態信息。他的經常使用場合有如下:bash

  • 對話(session)管理:保存登錄、購物車等須要記錄的信息
  • 個性化:保存用戶的偏好,好比網頁的字體大小、背景色等到
  • 追蹤:記錄和分析用戶行爲

Cookie 包含如下信息:服務器

  • Cookie 的名字
  • Cookie 的值(真正的數據寫在這裏面)
  • 到期時間
  • 所屬域名(默認是當前域名)
  • 生效的路徑(默認是當前網址)

瀏覽器能夠設置不接受 Cookie,也能夠設置不向服務器發送 Cookie。window.navigator.cookieEnabled屬性返回一個布爾值,表示瀏覽器是狗打開 Cookie 功能。cookie

// 瀏覽器是否打開 Cookie 功能
window.navigator.cookieEnabled // true
複製代碼

document.cookie返回當前網頁的Cookiesession

1、Cookie 和 HTTP 協議

Cookie 由 HTTP 協議生成,業主要提供 HTTP 協議使用dom

HTTP 迴應:Cookie 的生成

服務器若是但願在瀏覽器保存 Cookie,就要在 HTTP 迴應的頭部信息裏面,放置一個 Set-Cookie 字段。字體

Set-Cookie:foo = bar
複製代碼

若是服務器想改變一個早先設置的 Cookie,必須同時知足四個條件:Cookie 的keydomainpathsecure都匹配。加密

Http 請求:Cookie的發送

瀏覽器向服務器發送 HTTP 請求時,每一個請求都會帶上相應的 Cookie。也就是說,把服務器早前保存在瀏覽器的這段信息,再發回服務器。這時要使用 HTTP 頭信息的Cookie字段。spa

服務器收到瀏覽器發來的 Cookie 時,有兩點是沒法知道的。prototype

  • Cookie 的各類屬性,好比什麼時候過時。

  • 哪一個域名設置的 Cookie,究竟是一級域名設的,仍是某一個二級域名設的。

2、Cookie的屬性

Expires, Max-Age

Expires屬性指定一個具體的到期時間,到了指定時間之後,瀏覽器就再也不保留這個 Cookie。他的值是 UTC 格式,能夠使用 Date.prototype.toUTCString()進行格式轉換。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
複製代碼

若是不設置該屬性,或者設爲null,Cookie 只在當前會話(session)有效,瀏覽器窗口一旦關閉,當前 Session 結束,該 Cookie 就會被刪除。另外,瀏覽器根據本地時間,決定 Cookie 是否過時,因爲本地時間是不精確的,因此沒有辦法保證 Cookie 必定會在服務器指定的時間過時。

Max-Age屬性指定從如今開始 Cookie 存在的秒數,好比60 * 60 * 24 * 365(即一年)。過了這個時間之後,瀏覽器就再也不保留這個 Cookie。

若是同時指定了ExpiresMax-Age,那麼Max-Age的值將優先生效。

Domain,Path

Domain屬性指定瀏覽器發出 HTTP 請求時,哪些域名要附帶這個 Cookie。

Path屬性指定瀏覽器發出 HTTP 請求時,哪些路徑要附帶這個 Cookie。

Secure, HttpOnly

Secure屬性指定瀏覽器只有在加密協議 HTTPS 下,才能將這個 Cookie 發送到服務器。另外一方面,若是當前協議是 HTTP,瀏覽器會自動忽略服務器發來的Secure屬性。該屬性只是一個開關,不須要指定值。若是通訊是 HTTPS 協議,該開關自動打開。

HttpOnly屬性指定該 Cookie 沒法經過 JavaScript 腳本拿到,主要是document.cookie屬性、XMLHttpRequest對象和 Request API 都拿不到該屬性。

相關文章
相關標籤/搜索