HTTP 協(xié)議是無狀態(tài)的,目的是減少 CPU 內存消耗,讓 HTTP 協(xié)議盡可能簡單,能夠處理大量事務。
HTTP/1.1 引入 Cookie 來保存狀態(tài)信息。
Cookie 是服務器發(fā)送給客戶端的數據,該數據會被保存在瀏覽器中。
在下一次發(fā)送請求時,通過 Cookie 讓服務器識別出客戶端,從而實現(xiàn)保持登錄狀態(tài)等功能。
1. 創(chuàng)建過程
服務器響應報文包含 Set-Cookie 字段,客戶端解析為 Cookie 保存到瀏覽器。
客戶端下次請求時,請求報文中包含 Cookie 字段。
注:
Cookie,Set-Cookie 和 Content-Disposition 等是RFC中定義的首部字段;
而請求,響應,通用,實體字段是 HTTP/1.1 首部字段。
2. Set-Cookie 值
| 屬性 | 說明 |
|---|---|
| name=值 | 賦予 Cookie 的名稱和其值(必需項) |
| expires=日期 | Cookie 的有效期(若不明確指定則默認為瀏覽器關閉前為止) |
| domain=域名 | 作為 Cookie 適用對象的域名(若不指定則默認為創(chuàng)建 Cookie 的服務器的域名) |
| path=路徑 | 將服務器上的文件目錄作為 Cookie 的適用對象(若不指定則默認為文檔所在的文件目錄) |
| Secure | 僅在 HTTPS 安全通信時才會發(fā)送 Cookie |
| HttpOnly | 加以限制,使 Cookie 不能被 JavaScript 腳本訪問 |
3. Session 與 Cookie
Session 存在于服務器,Cookie 存在于客戶端。
每個 Session 有一個 Session ID,用來唯一標識服務器上的某個 Session。
Cookie 中有一個鍵值對——「sid: Session ID」。
4. 瀏覽器禁用 Cookie
對 URL 進行重寫,在 URL 后面加上 sid=xxx 。
5. 實現(xiàn)用戶名和密碼的自動填寫
網站腳本從瀏覽器中的 Cookie 讀取用戶名和密碼,從而實現(xiàn)自動填寫。