Cookie機(jī)制
Cookie原意是小甜餅,是服務(wù)器保存在瀏覽器的一小段文本信息,屬于其中一種互聯(lián)網(wǎng)存儲(chǔ)機(jī)制。
2.1 Cookie特點(diǎn)
每個(gè)Cookie大小一般不超過4KB;
Cookie保存的信息包括Cookie名、Cookie值、到期時(shí)間、所屬域名和生效路徑;
瀏覽器每次向服務(wù)器發(fā)出請(qǐng)求,會(huì)在Http請(qǐng)求頭上帶上Cookie信息;
2.2 Cookie API
瀏覽器可以設(shè)置拒絕Cookie
window.navigator.cookieEnabled =false;
獲取當(dāng)前頁面的所有Cookie
寫入Cookie
document.cookie ='name=teren';//document.cookie一次只能寫一個(gè)cookie,而且是寫入而不是覆蓋;
[疑問]為什么讀取cookie是全部,而寫入則是一個(gè)一個(gè)呢?這與瀏覽器和服務(wù)器之間的cookie通信格式相關(guān)。
瀏覽器向服務(wù)器發(fā)送cookie時(shí),是將所有cookie一起發(fā)送;
GET/sample_page.htmlHTTP/1.1Host:www.example.orgCookie: cookie_name1=cookie_value1; cookie_name2=cookie_value2Accept: */*
服務(wù)器告訴瀏覽器需要存儲(chǔ)cookie時(shí),則是分行設(shè)定
HTTP/1.0200OKContent-type: text/html
Set-Cookie: cookie_name1=cookie_value1Set-Cookie: cookie_name2=cookie_value2; expires=Sun, 16 Jul 3567 06:23:41 GMT
刪除cookie
刪除cookie的簡(jiǎn)便方法就是設(shè)置expires = 0或者是過期時(shí)間,如expires = Thu,01-Jan-1970 00:00:01 GMT
cookie的屬性
Set-Cookie: value[;expires = date][;domain = domain][;path = path][;secure][;HttpOnly]
value:規(guī)定cookie的值,形式是鍵值對(duì);
expires:規(guī)定cookie過期時(shí)間,格式為形式為expires = someDate.toGMTString();
domain:指定cookie所在的域名,只有訪問的域名匹配domain屬性,cookie才會(huì)發(fā)送到服務(wù)器;
path:指定路徑,只有path屬性匹配向服務(wù)器發(fā)送的路徑,cookie才會(huì)發(fā)送,只要path屬性匹配發(fā)送路徑的一部分,都可以發(fā)送;
secure:指定cookie只能在加密協(xié)議HTTPS下發(fā)送到服務(wù)器;
HttpOnly:設(shè)置cookie不能被js讀取,這主要是放置XSS攻擊盜取cookie;
一個(gè)完整的瀏覽器設(shè)置cookie寫法:
3.Web Storage和Cookie的聯(lián)系與區(qū)別
特性cookieWeb Storag
數(shù)據(jù)生命周期服務(wù)器生成的話,為指定失效時(shí)間;瀏覽器段生成的話默認(rèn)為關(guān)閉瀏覽器后localStorage永久有效,除非使用localStorage.clear()清空;sessionStorage為關(guān)閉瀏覽器后;
存儲(chǔ)空間一般為4K一般5MB~10MB
與服務(wù)器通信每次攜帶在HTTP頭中僅在客戶端,如需通信,可通過get或post方法
應(yīng)用場(chǎng)景用戶登錄身份驗(yàn)證(結(jié)合HttpOnly相對(duì)安全性高)保存用戶購物車信息以及HTML5游戲的本地存儲(chǔ)
參考