可以籠統的將cookie分為兩類:會話cookie和持久cookie
會話cookie是一種臨時cookie,它記錄了用戶訪問站點時的設置和偏好。用戶退出瀏覽器時,會話cookie就被刪除了。
持久cookie的生存時間更長一些,他們存儲在磁盤上,瀏覽器退出,計算機重啟時它們仍然存在。
會話cookie和持久cookie之間唯一的區別就是它們的過期時間。
稍后我們會看到,如果設置了Discard
參數,或者沒有設置Expires
或Max-Age
參數來說明擴展的過期時間,這個cookie就是一個會話cookie。
用戶首次訪問Web站點時,Web服務器對用戶一無所知。Web服務器希望這個用戶會再次回來,所以想給這個用戶“拍上”一個獨有的cookie,這樣以后它就可以識別出這個用戶了。cookie中包含了一個由“名字=值”這樣的信息構成的任意列表,并通過Set-Cookie
或Set-Cookie2
HTTP響應首部將其貼到用戶身上去。
HTTP響應:
HTTP/1.0 200 OK
Set-Cookie: a=1; path=/test/; domain=www.baidu.com
Set-Cookie: b=2; domain=.baidu.com
Set-Cookie: c=3; path=/
Content-type: text/html
Content-length: 1903
...
注:
每個cookie對應一條Set-Cookie
cookie中可以包含任意信息,但他們通常都只包含一個服務器為了進行跟蹤而產生的獨特的識別碼。
瀏覽器會記住從服務器返回的Set-Cookie
或Set-Cookie2
首部中的cookie內容,并將cookie集存儲在瀏覽器的cookie數據庫中。將來用戶返回同一站點,瀏覽器會挑中那個服務器貼到用戶上的那些cookie,并在一個Cookie請求首部中講其傳回去。
再次請求:
GET / HTTP/1.0
Host: www.baidu.com
Cookie: b=2; c=3
注:
所有可用的cookie用一條Cookie返回
注:
(1)cookie0規范
cookie0規范定義了Set-Cookie
響應首部,Cookie請求首部以及用戶控制cookie的字段。
Set-Cookie: name=value[; expires=date][; path=path][; domain=domain][; secure]
Cookie: name1=value1[; name2=value2]
(2)cookie的屬性
cookie的域屬性
產生cookie的服務器,可以向Set-Cookie
響應首部添加一個Domain
屬性來控制哪些站點可以看到那個cookie。
例如:
Set-Cookie: user="mary17"; domain="air.com"
會告訴瀏覽器將user="mary17"
的cookie發送給域“.air.com
”。
即,Cookie: user="mary17"
cookie的路徑屬性
cookie規范甚至允許用戶將cookie與部分Web站點關聯起來。可以通過Path
屬性來實現這一功能,在這個屬性列出的URL路徑前綴下所有的cookie都是有效的。