什么事cookies:
- cookie是瀏覽器存儲(chǔ)在用戶 客戶端上的一小段文本文件 (不超過(guò)4k甚亭,單域名cookies不超過(guò)30個(gè))哨啃,不包含任何執(zhí)行代碼撩满。
-
http://example.com設(shè)置的 Cookie芜繁,可以被https://example.com讀取。
(瀏覽器的同源政策規(guī)定降盹,兩個(gè)網(wǎng)址只要域名相同和端口相同,就可以共享 Cookie(參見《同源政策》一章)谤辜。注意蓄坏,這里不要求協(xié)議相同。丑念,)
為什么要cookies:
由于http協(xié)議的無(wú)狀態(tài)涡戳,對(duì)于一個(gè)瀏覽器發(fā)送的多次請(qǐng)求,服務(wù)器無(wú)法辨別是否源自同意瀏覽器脯倚,所欲需要額外的數(shù)據(jù)用于維護(hù)會(huì)話渔彰,cookies就是這樣一段隨http請(qǐng)求一起被傳遞的額外數(shù)據(jù)嵌屎。
cookies的構(gòu)成:
set cookie: name=value; domain=.mozilla.org; expires=Feb, 13-Mar-2018 11:47:50; path=/; secure
名稱 name:一個(gè)唯一確定cookie的名稱,不分大小寫恍涂,cookie的名字必須是經(jīng)過(guò)URL編碼的宝惰,一般可以采用某個(gè)前綴在加上當(dāng)前時(shí)間的- - 做法,這樣的話名稱能夠確保是唯一的再沧,也比較方便尼夺。
值 value:存儲(chǔ)在cookie中的字符串值,必須經(jīng)過(guò)被URL編碼
域 domain:對(duì)于哪個(gè)域是有效的产园,如果沒有設(shè)置的話汞斧,默認(rèn)來(lái)自設(shè)置cookie的那個(gè)域,在上訴例子中就是.Mozilla.org
失效時(shí)間 expires:表示cookie何時(shí)應(yīng)該被刪除的時(shí)間戳什燕,這個(gè)日期是GMT格式的日期粘勒,如果設(shè)置是以前的時(shí)間,cookie會(huì)被立刻刪除屎即。上 訴cookie的失效時(shí)間是Feb,13-Mar-2018 11:47:50庙睡。
路徑 path :指定域中的那個(gè)路徑,應(yīng)該想服務(wù)器發(fā)送cookie技俐,/ 表示沒有限制
安全標(biāo)志 secure :指定以后乘陪,cookie只有在使用https連接的時(shí)候才可以發(fā)送到服務(wù)器,該屬性只是一個(gè)開關(guān)雕擂,不需要指定啡邑。如果通信是https 該開關(guān)默認(rèn)打開。
cookies常見應(yīng)用
- 對(duì)話(session)管理:保存登錄井赌、購(gòu)物車等需要記錄的信息谤逼。
- 個(gè)性化:保存用戶的偏好,比如網(wǎng)頁(yè)的字體大小仇穗、背景色等等流部。
- 追蹤:記錄和分析用戶行為。
cookies相關(guān)設(shè)置
- cookies由http協(xié)議生成纹坐,也主要被http協(xié)議使用
設(shè)置cookie
- 在http回應(yīng)頭信息里放置 Set-Cookie字段
Set-Cookie:foo=bar // 在瀏覽器保存一個(gè)名為foo的cookie 值為bar
- http回應(yīng)可以設(shè)置多個(gè)Set-Cookie字段 生成多個(gè)cookie
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie:test_Cookie=one
Set-Cookie:testCookie=tow
[page content]
除了cookie的值 還可以附加上面提到的其他屬性
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
- 如果服務(wù)器想要修改之前的cookie 就不許保證新的cookie的 key domain path secure這四個(gè)與之前的cookie完全一致枝冀,否則會(huì)創(chuàng)新新的cookie 而不替換舊cookie
服務(wù)器收到瀏覽器發(fā)來(lái)的cookie 亮點(diǎn)是無(wú)法知道的:
- cookie的這種屬性和過(guò)期時(shí)間
- 那個(gè)域名設(shè)置的cookie 到底是一級(jí)域名還是二級(jí)域名設(shè)置的cookie