Cookie概述瀏覽器
HTTP是一種無狀態的請求/響應協議,用戶經過瀏覽器訪問Web站點後,Web服務端沒有可用信息來判斷是哪一個用戶發起的請求,更加沒法知道下次訪問的仍是不是上次訪問的用戶,沒法識別當前用戶。最初,爲了解決這個問題出現了不少解決方案,例如客戶端IP地址跟蹤、用戶登陸認證、URL中嵌入識別信息等,但都沒有很好的解決根本問題。然而,Cookie的設計實現很好的解決了這個問題。用戶經過瀏覽器訪問Web站點後,服務端會將一些Key/Value組合的鍵值對經過Set-Cookie或Set-Cookie2返回給瀏覽器,用戶再次訪問Web站點時瀏覽器會將符合條件的鍵值對再發送給服務端,這樣服務端就能夠經過這個鍵值信息識別出當前用戶。安全
Cookie分類服務器
Cookie能夠分爲兩類:會話Cookie和持久Cookie。會話Cookie是一種臨時Cookie,沒有設置它的有效期,當用戶退出瀏覽器的時候,它將會被刪除。當設置了Cookie的有效期後,它就是持久Cookie,它能夠被存儲到硬盤上,當用戶退出瀏覽器或機器重啓時,它依然存在,能夠被再次讀取使用。dom
Cookie版本性能
當前可以使用的Cookie規範有兩個版本:Cookie版本0和Cookie版本1。Cookie版本1是對Cookie版本0的擴展,版本1能夠和版本0互操做,可是Cookie版本1沒有Cookie版本0使用的普遍。網站
Cookie版本0屬性設計
版本0定義了Set-Cookie響應首部、Cookie請求首部。生命週期
Set-Cookie響應首部,其實就是服務端返回的Cookie信息,具體的語法以下:文檔
Set-Cookie:key=value;expires=date;domain=domain;path=path;secure域名
Key/value表示在服務端可跟蹤、可識別的用戶信息;expires表示Cookie的結束日期,若是沒指定,Cookie會在用戶退出瀏覽器時過時;domain告訴瀏覽器這個Cookie能夠被髮送到哪一個域名,若是沒指定,默認爲產生Cookie的服務器主機名,瀏覽器會存儲不少不一樣網站的Cookie,瀏覽器會根據domain的值將Cookie發送到對應的域名下;path指定Cookie對哪些請求路徑生效,若是沒指定,默認爲產生Cookie的URL路徑;secure表示在使用SSL安全鏈接時才發送Cookie,若沒設置secure,則沒限制。例如:
Set-Cookie:member_id=1496800101;expires=Tuesday 16-Aug-01 22:10:11 GMT;domain=「abc.com";path=/member;secure
Cookie請求首部,就是瀏覽器請求服務端時發送的Cookie信息,具體語法以下:
Cookie:key1=value1;key2=value2;key3=value3...
例如:
Cookie:member_id=1496800101
Cookie版本1屬性
版本1定義了Set-Cookie2響應首部、Cookie2請求首部。這個版本作了以下一些改動:
Set-Cookie2響應首部具體語法以下:
Set-Cookie2:key=value;Version=「1」;Comment=Comment;CommentURL=CommentURL;Discard;Max-Age=age;domain=domain;path=path;Port=Port;secure
Version對於Cookie規範的版本;Comment說明服務器如何去使用這個Cookie;CommentURL表示一個URL,指向描述該Cookie的文檔;Discard表示若是設置此標識,會在瀏覽器退出時放棄此Cookie;Max-Age使用相對當前時間的秒數來設置Cookie的生命週期;Port表示對Cookie生效的端口,多個端口可用逗號分隔。
Cookie2請求首部會回傳每一個Cookie的附加信息,也就是Set-Cookie2中的屬性信息,例如:
Cookie:$Version=「1」;member_id=14690801;$Domain=「abc.com」;$path=/member
Cookie缺點
雖然Cookie能夠很好的解決識別用戶的問題,可是,它也有不少的缺點: