cookie
cookie 是存儲(chǔ)在瀏覽器本地的一小段數(shù)據(jù)(最大不超過(guò)4k)菇用,用來(lái)記錄一些當(dāng)頁(yè)面關(guān)閉后還需要存儲(chǔ)的數(shù)據(jù)塞弊。例如用戶名缀匕、瀏覽歷史之類的不敏感信息贸辈。每次網(wǎng)絡(luò)請(qǐng)求的請(qǐng)求頭(Request headers)释树,都會(huì)帶上 cookie ,所以 cookie 太多會(huì)影響網(wǎng)絡(luò)傳輸效率擎淤。
cookie 可以使用 js 在瀏覽器設(shè)置奢啥,但是通常我們選擇在服務(wù)端使用 HTTP 協(xié)議規(guī)定的 set-cookie 來(lái)設(shè)置 cookie 。cookie 存儲(chǔ)的數(shù)據(jù)只支持 string 格式嘴拢,如果存入其他類型的數(shù)據(jù)桩盲,會(huì)自動(dòng)轉(zhuǎn)化為 string 類型。
我們可以在本地瀏覽器中使用document.cookie
來(lái)查詢當(dāng)前網(wǎng)站設(shè)置的 cookie 席吴。
cookie 設(shè)置時(shí)的參數(shù):
- path:表示影響 cookie 的路徑赌结。只有到 path 時(shí)才發(fā)送當(dāng)前 cookie;
- Expires/Max-Age:當(dāng)前 cookie 的過(guò)期日期孝冒。expires 是UTC格式時(shí)間柬姚,max-age 是 cookie 多久后過(guò)期的相對(duì)時(shí)間;
- secure:如果為 true 時(shí)庄涡,表明當(dāng)前 cookie 在HTTP中是無(wú)效的量承,只能在HTTPS下使用;
- httpOnly:如果為 true 穴店,表明不允許瀏覽器腳本操作
document.cookie
去更改 cookie 撕捍。
session
session 看起來(lái)和 cookie 是差不多的東西,但是兩個(gè)東西實(shí)際上不是同一維度的東西迹鹅。cookie 是存儲(chǔ)的一小段數(shù)據(jù)卦洽,而 session 是在實(shí)現(xiàn)過(guò)程中使用到 cookie 。
當(dāng)你登錄某些頁(yè)面時(shí)斜棚,刷新后發(fā)現(xiàn)你的登錄狀態(tài)還在阀蒂,服務(wù)器如何知道你是登錄狀態(tài)呢?弟蚀?
當(dāng)用戶正確登錄頁(yè)面時(shí)蚤霞,會(huì)向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器通過(guò)驗(yàn)證后會(huì)生成一個(gè)對(duì)象义钉,對(duì)象里有一個(gè) id 昧绣。這個(gè) id 是隨機(jī)生成的,而這個(gè)對(duì)象就可以認(rèn)為是 session 捶闸。服務(wù)器將返回的 session 字段添加到 cookie 里夜畴,當(dāng)你再次向服務(wù)器發(fā)送請(qǐng)求時(shí)就會(huì)帶上 cookie 拖刃,服務(wù)器只需要驗(yàn)證 cookie 里的 session_id 就可以得知當(dāng)前的用戶。
其實(shí) session 最大的作用就是進(jìn)行用戶身份的驗(yàn)證贪绘。
localStorage
localStorage 不同于 cookie 和 session 兑牡,單純是一個(gè)存儲(chǔ)數(shù)據(jù)的東西。
localStorage 一般用于存儲(chǔ)大量數(shù)據(jù)(最大5M)在瀏覽器中税灌,保存的數(shù)據(jù)永久不會(huì)失效均函,除非用 JS 手動(dòng)清除。
localStorage 不參與網(wǎng)絡(luò)傳輸菱涤,一般用于性能優(yōu)化苞也,可以保存圖片、JS粘秆、CSS如迟、Html模板、大量數(shù)據(jù)翻擒。