Cookie
作用
Cookie 是一段由服務器通過在請求或響應報文發送給客戶端的特殊信息,客戶端會記錄該信息,當下次發送請求時會在請求頭中附帶該信息,由服務器進行識別。
Cookie 通常有以下幾種作用:
會話狀態管理(如用戶登錄狀態、購物車)
個性化設置(如用戶自定義設置)
瀏覽器行為跟蹤(如跟蹤分析用戶行為)
創建Cookie
- 服務器使用Set-Cookie響應頭,告知客戶端應該保存該信息
Set-Cookie: <cookie名稱>=<cookie值>
栗子:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: sid=1342077140226724
- 客戶端發起新請求時會將以前保存過的Cookie通過請求頭發送給服務器
GET / HTTP/1.1
Cookie: sid=1342077140226724
期限
Session Cookie
通常,當Cookie未做任何指定期限時,瀏覽器會將Cookie信息保存在內存中,瀏覽器關閉后便自動刪除,比如我們登錄一些網站時不勾選“自動登錄”選項時,我們關閉瀏覽器登錄狀態就自動刪除了。需要注意的是,該狀態由瀏覽器控制,因此部分瀏覽器也會提供關閉瀏覽器不清理cookie的功能。Permanent Cookie
通過指定過期時間(Expires)或有效期(Max-Age),可以為瀏覽器指定一個過期時間,此時Cookie便儲存在硬盤上,而不是儲存于內存。
Set-Cookie: uuid=123456; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
//
作用域
Cookie作用域指需要發送的URL集合,它由Domain和Path指令定義。
Domain表示Cookie所在的域。如果沒有指定,默認為當前的文檔地址上的主機名(但是不包含子域名)。如果指定了Domain,則一般包含子域名。
如果設置了Domain=test.com,則Cookie包含在子域名中(如user.test.com或login.test.com)。
Path指令表明需要發送Cookie的URL路徑。字符%x2F (即"/")用做文件夾分隔符,子文件夾也會被匹配到。
如設置Path=/docs,則下面這些地址都將匹配到:
"/docs",
"/docs/Web/",
"/docs/Web/HTTP"
JavaScript訪問Cookie
可以通過document.cookie
創建新的Cookie,或者通過該屬性訪問未指定的HttpOnly標志的Cookie。
document.cookie = "yummy_cookie=choco";
document.cookie = "tasty_cookie=strawberry";
console.log(document.cookie);
// logs "yummy_cookie=choco; tasty_cookie=strawberry"
Session
對于Cookie來說,通過HTTP協議傳輸的信息均是明文傳輸,任何人都可以截獲、篡改HTTP請求。因此客戶端傳來的信息是不可靠的,那么有什么辦法來解決這個問題呢?
數據傳輸時,服務器與客戶端之間不使用明文傳輸,而是傳輸加密后的密文,當服務器接收到密文后將密文解析,如果信息正確再通過解析后的密文找到對應數據返回給客戶端。
這個過程我們成為會話(session),即客戶端與服務器之間一對一的交互。
參考:
HTTP cookies