Cookie機制
Cookie原意是小甜餅匾七,是服務器保存在瀏覽器的一小段文本信息嘉抓,屬于其中一種互聯(lián)網(wǎng)存儲機制译仗。
2.1 Cookie特點
每個Cookie大小一般不超過4KB;
Cookie保存的信息包括Cookie名、Cookie值脑题、到期時間缝裤、所屬域名和生效路徑屏轰;
瀏覽器每次向服務器發(fā)出請求,會在Http請求頭上帶上Cookie信息倘是;
2.2 Cookie API
瀏覽器可以設置拒絕Cookie
window.navigator.cookieEnabled =false;
獲取當前頁面的所有Cookie
寫入Cookie
document.cookie ='name=teren';//document.cookie一次只能寫一個cookie亭枷,而且是寫入而不是覆蓋袭艺;
[疑問]為什么讀取cookie是全部搀崭,而寫入則是一個一個呢?這與瀏覽器和服務器之間的cookie通信格式相關猾编。
瀏覽器向服務器發(fā)送cookie時瘤睹,是將所有cookie一起發(fā)送;
GET/sample_page.htmlHTTP/1.1Host:www.example.orgCookie: cookie_name1=cookie_value1; cookie_name2=cookie_value2Accept: */*
服務器告訴瀏覽器需要存儲cookie時答倡,則是分行設定
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的簡便方法就是設置expires = 0或者是過期時間轰传,如expires = Thu,01-Jan-1970 00:00:01 GMT
cookie的屬性
Set-Cookie: value[;expires = date][;domain = domain][;path = path][;secure][;HttpOnly]
value:規(guī)定cookie的值,形式是鍵值對瘪撇;
expires:規(guī)定cookie過期時間获茬,格式為形式為expires = someDate.toGMTString();
domain:指定cookie所在的域名倔既,只有訪問的域名匹配domain屬性恕曲,cookie才會發(fā)送到服務器;
path:指定路徑渤涌,只有path屬性匹配向服務器發(fā)送的路徑佩谣,cookie才會發(fā)送,只要path屬性匹配發(fā)送路徑的一部分实蓬,都可以發(fā)送茸俭;
secure:指定cookie只能在加密協(xié)議HTTPS下發(fā)送到服務器;
HttpOnly:設置cookie不能被js讀取安皱,這主要是放置XSS攻擊盜取cookie;
一個完整的瀏覽器設置cookie寫法:
3.Web Storage和Cookie的聯(lián)系與區(qū)別
特性cookieWeb Storag
數(shù)據(jù)生命周期服務器生成的話调鬓,為指定失效時間;瀏覽器段生成的話默認為關閉瀏覽器后localStorage永久有效酌伊,除非使用localStorage.clear()清空袖迎;sessionStorage為關閉瀏覽器后;
存儲空間一般為4K一般5MB~10MB
與服務器通信每次攜帶在HTTP頭中僅在客戶端,如需通信燕锥,可通過get或post方法
應用場景用戶登錄身份驗證(結(jié)合HttpOnly相對安全性高)保存用戶購物車信息以及HTML5游戲的本地存儲
參考