cookie篇
cookie是客戶端本地存儲的一種方式扳剿,常見的客戶端本地存儲的方式還有:session storage所踊、local storage和indexDB。cookie有兩種,一種儲存在瀏覽器進(jìn)程中,另一種儲存在硬盤中谭贪。sessionId儲存在第一種cookie中,所以當(dāng)瀏覽器關(guān)閉就等于銷毀了這個sessionId锦担。
cookie的用途
cookie是一小段文本信息俭识,伴隨著用戶請求在 Web 服務(wù)器和瀏覽器之間傳遞。cookie存儲在計算機(jī)本地中,可以跨越一個域名下的多個網(wǎng)頁洞渔,但不能跨越多個域名使用套媚。保存用戶登錄信息、保存購物信息是cookie常見的用途痘煤。
cookie的原理
用戶每次訪問頁面瀏覽器都先搜索本地是否有與這個域名相關(guān)聯(lián)的cookie凑阶,有的話便添加到request header的Cookie字段中,與http請求一起發(fā)送到該站點衷快。
cookie的內(nèi)容
在瀏覽器開發(fā)者模式resource下可觀察cookie,其內(nèi)容有:name/value姨俩、domain蘸拔、Path、Expires/Max-age环葵、httpOnly调窍、Secure。各名值對之間需有分號+空格隔開张遭。其中httpOnly屬性只能在服務(wù)器設(shè)置邓萨、httpOnly和secure是非名值對屬性。例子如下:
document.cookie = "test=myCookie; domain=.google.com.hk; expires=Sat, 04 Nov 2017 16:00:00 GMT; secure"
cookie的設(shè)置
可以從客戶端或者服務(wù)端設(shè)置cookie:
//客戶端:
document.cookie = "name=value[; expires=GMTDate][; domain=domain][; path=path][; secure]"
//服務(wù)端:
Set-Cookie: name=value[; expires=GMTDate][; domain=domain][; path=path][; secure][; HttpOnly]
每次設(shè)置不同的cookie名稱就是新增cookie菊卷,修改cookie時可以修改原cookie的expries缔恳、secure屬性,但不能修改domain洁闰、path屬性歉甚。修改cookie時domain、path必須與原cookie保持一致扑眉,不然就會新增cookie纸泄。將expries設(shè)為一個過去的時間或?qū)ax-age設(shè)為0可以刪除cookie赖钞。
cookie的缺點
安全性:由于cookie在HTTP中是明文傳遞的,其中包含的數(shù)據(jù)都可以被他人訪問聘裁,可能會被篡改雪营、盜用。
- 大小限制:cookie的大小限制在4KB左右衡便,若要做大量存儲顯然不是理想的選擇卓缰。
- 增加流量:cookie每次請求都會被自動添加到Request Header中,無形中增加了流量砰诵。cookie信息越大征唬,對服務(wù)器請求的時間也越長。
session篇
在用戶訪問頁面時茁彭,服務(wù)器可以為每個用戶瀏覽器創(chuàng)建一個會話對象(session對象)总寒,并將sessionId保存到cookie上。注意:一個瀏覽器獨占一個session對象(默認(rèn)情況下)理肺。因此摄闸,在需要保存用戶數(shù)據(jù)時,服務(wù)器程序可以把用戶數(shù)據(jù)寫到用戶瀏覽器獨占的session中妹萨,當(dāng)用戶使用瀏覽器訪問其它程序時年枕,程序可以從用戶的session中取出該用戶的數(shù)據(jù),為用戶服務(wù)乎完。
session和cookie的區(qū)別
- cookie數(shù)據(jù)存放在客戶的瀏覽器上熏兄,session數(shù)據(jù)放在服務(wù)器上。
- cookie不是很安全树姨,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙摩桶。
- session會在一定時間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多帽揪,會比較占用你服務(wù)器的性能硝清。
- cookie保存的數(shù)據(jù)不能超過4K,某些瀏覽器對cookie的名值對數(shù)量有限制转晰。