一亲铡、cookie
cookie是存儲(chǔ)在瀏覽器上的一小段數(shù)據(jù),用來記錄某些當(dāng)頁面關(guān)閉或者刷新后仍然需要記錄的信息葡兑。在控制臺(tái)用 「document.cookie」查看你當(dāng)前正在瀏覽的網(wǎng)站的cookie奖蔓。
cookie可以使用 js 在瀏覽器直接設(shè)置(用于記錄不敏感信息,如用戶名), 也可以在服務(wù)端通使用 HTTP 協(xié)議規(guī)定的 set-cookie 來讓瀏覽器種下cookie讹堤,這是最常見的做法吆鹤。(打開一個(gè)網(wǎng)站,清除全部cookie洲守,然后刷新頁面疑务,在network的Response headers試試找一找set-cookie吧)
每次網(wǎng)絡(luò)請(qǐng)求 Request headers 中都會(huì)帶上cookie沾凄。所以如果 cookie 太多太大對(duì)傳輸效率會(huì)有影響。
一般瀏覽器存儲(chǔ)cookie 最大容量為4k知允,所以大量數(shù)據(jù)不要存到cookie撒蟀。
設(shè)置cookie時(shí)的參數(shù):
path:表示 cookie 影響到的路徑,匹配該路徑才發(fā)送這個(gè) cookie廊镜。expires 和 maxAge:告訴瀏覽器 cookie 時(shí)候過期牙肝,maxAge 是 cookie 多久后過期的相對(duì)時(shí)間。不設(shè)置這兩個(gè)選項(xiàng)時(shí)會(huì)產(chǎn)生 session cookie嗤朴,session cookie 是 transient 的配椭,當(dāng)用戶關(guān)閉瀏覽器時(shí),就被清除雹姊。一般用來保存 session 的 session_id股缸。
secure:當(dāng) secure 值為 true 時(shí),cookie 在 HTTP 中是無效吱雏,在 HTTPS 中才有效
httpOnly:瀏覽器不允許腳本操作 document.cookie 去更改 cookie敦姻。一般情況下都應(yīng)該設(shè)置這個(gè)為 true,這樣可以避免被 xss 攻擊拿到 cookie歧杏。[cookie 參數(shù)]**[簡(jiǎn)述 Cookie 是什么]
二镰惦、session
當(dāng)一個(gè)用戶打開淘寶登錄后,刷新瀏覽器仍然展示登錄狀態(tài)犬绒。服務(wù)器如何分辨這次發(fā)起請(qǐng)求的用戶是剛才登錄過的用戶呢旺入?這里就使用了session保存狀態(tài)。用戶在輸入用戶名密碼提交給服務(wù)端凯力,服務(wù)端驗(yàn)證通過后會(huì)創(chuàng)建一個(gè)session用于記錄用戶的相關(guān)信息茵瘾,這個(gè) session 可保存在服務(wù)器內(nèi)存中,也可保存在數(shù)據(jù)庫中咐鹤。
創(chuàng)建session后拗秘,會(huì)把關(guān)聯(lián)的session_id 通過setCookie 添加到http響應(yīng)頭部中。
瀏覽器在加載頁面時(shí)發(fā)現(xiàn)響應(yīng)頭部有 set-cookie字段祈惶,就把這個(gè)cookie 種到瀏覽器指定域名下雕旨。
當(dāng)下次刷新頁面時(shí),發(fā)送的請(qǐng)求會(huì)帶上這條cookie行瑞, 服務(wù)端在接收到后根據(jù)這個(gè)session_id來識(shí)別用戶奸腺。
cookie 是存儲(chǔ)在瀏覽器里的一小段「數(shù)據(jù)」,而session是一種讓服務(wù)器能識(shí)別某個(gè)用戶的「機(jī)制」血久,session 在實(shí)現(xiàn)的過程中需要使用cookie突照。 二者不是同一維度的東西。
雖然Session保存在服務(wù)器,對(duì)客戶端是透明的螟深,它的正常運(yùn)行仍然需要客戶端瀏覽器的支持堕绩。這是因?yàn)镾ession 需要使用Cookie作為識(shí)別標(biāo)志窑眯。HTTP協(xié)議是無狀態(tài)的,Session不能依據(jù)HTTP連接來判斷是否為同一客戶冈在,因此服務(wù)器向客戶端瀏覽器發(fā)送一 個(gè)名為JSESSIONID的Cookie乙埃,它的值為該Session的id(也就是HttpSession.getId()的返回值)共耍。Session 依據(jù)該Cookie來識(shí)別是否為同一用戶版仔。
該Cookie為服務(wù)器自動(dòng)生成的游盲,它的maxAge屬性一般為–1,表示僅當(dāng)前瀏覽器內(nèi)有效蛮粮,并且各瀏覽器窗口間不共享益缎,關(guān)閉瀏覽器就會(huì)失效。
因此同一機(jī)器的兩個(gè)瀏覽器窗口訪問服務(wù)器時(shí)然想,會(huì)生成兩個(gè)不同的Session莺奔。但是由瀏覽器窗口內(nèi)的鏈接、腳本等打開的新窗口(也就是說不是雙擊桌面瀏覽器圖標(biāo)等打開的窗口)除外变泄。這類子窗口會(huì)共享父窗口的Cookie令哟,因此會(huì)共享一個(gè)Session。
注意: 新開的瀏覽器窗口會(huì)生成新的Session妨蛹,但子窗口除外屏富。子窗口會(huì)共用父窗口的Session。 例如蛙卤,在鏈接上右擊役听,在彈出的快捷菜單中選擇“在新窗口中打開”時(shí),子窗口便可以訪問父窗口的Session表窘。
三、localStoragelocalStorage HTML5本地存儲(chǔ)web storage特性的API之一甜滨,用于將大量數(shù)據(jù)(最大5M)保存在瀏覽器中乐严,保存后數(shù)據(jù)永遠(yuǎn)存在不會(huì)失效過期,除非用 js手動(dòng)清除衣摩。
不參與網(wǎng)絡(luò)傳輸昂验。
一般用于性能優(yōu)化,可以保存圖片艾扮、js既琴、css、html 模板泡嘴、大量數(shù)據(jù)甫恩。
轉(zhuǎn)載自他人作為學(xué)習(xí)筆記 侵刪