cookie & session &localStorage 分別是什么


title: cookie & session &localStorage 分別是什么?
tags: cookie & session &localStorage 分別是什么?
notebook: 零散知識(shí)


Cookie是什么?

  1. Cookie 是瀏覽器訪問(wèn)服務(wù)器后,服務(wù)器傳給瀏覽器的一段數(shù)據(jù)
  2. 瀏覽器需要保存這段數(shù)據(jù),不得輕易刪除。
  3. 此后每次瀏覽器訪問(wèn)該服務(wù)器,都必須帶上這段數(shù)據(jù)。

為什么需要Cookie?

因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的,對(duì)于一個(gè)瀏覽器發(fā)出的多次請(qǐng)求,WEB服務(wù)器無(wú)法區(qū)分 是不是來(lái)源于同一個(gè)瀏覽器。所以,需要額外的數(shù)據(jù)用于維護(hù)會(huì)話。 Cookie 正是這樣的一段隨HTTP請(qǐng)求一起被傳遞的額外數(shù)據(jù)

Cookie能做什么?

Cookie只是一段文本,所以它只能保存字符串。而且瀏覽器對(duì)它有大小限制以及 它會(huì)隨著每次請(qǐng)求被發(fā)送到服務(wù)器,所以應(yīng)該保證它不要太大。 Cookie的內(nèi)容也是明文保存的,有些瀏覽器提供界面修改,所以, 不適合保存重要的或者涉及隱私的內(nèi)容。

Cookie 的限制。

大多數(shù)瀏覽器支持最大為 4096 字節(jié)的 Cookie。由于這限制了 Cookie 的大小,最好用 Cookie 來(lái)存儲(chǔ)少量數(shù)據(jù),或者存儲(chǔ)用戶(hù) ID 之類(lèi)的標(biāo)識(shí)符。用戶(hù) ID 隨后便可用于標(biāo)識(shí)用戶(hù),以及從數(shù)據(jù)庫(kù)或其他數(shù)據(jù)源中讀取用戶(hù)信息。 瀏覽器還限制站點(diǎn)可以在用戶(hù)計(jì)算機(jī)上存儲(chǔ)的 Cookie 的數(shù)量。大多數(shù)瀏覽器只允許每個(gè)站點(diǎn)存儲(chǔ) 20 個(gè) Cookie;如果試圖存儲(chǔ)更多 Cookie,則最舊的 Cookie 便會(huì)被丟棄。有些瀏覽器還會(huì)對(duì)它們將接受的來(lái)自所有站點(diǎn)的 Cookie 總數(shù)作出絕對(duì)限制,通常為 300 個(gè)。

如何使用 Cookie

Cookie 一般有兩個(gè)作用

  1. 第一個(gè)作用是識(shí)別用戶(hù)身份。
    比如用戶(hù) A 用瀏覽器訪問(wèn)了 a.com,那么 a.com 的服務(wù)器就會(huì)立刻給 A 返回一段數(shù)據(jù)「uid=1」(這就是 Cookie)。當(dāng) A 再次訪問(wèn) a.com 的其他頁(yè)面時(shí),就會(huì)附帶上「uid=1」這段數(shù)據(jù)。
    同理,用戶(hù) B 用瀏覽器訪問(wèn) a.com 時(shí),a.com 發(fā)現(xiàn) B 沒(méi)有附帶 uid 數(shù)據(jù),就給 B 分配了一個(gè)新的 uid,為2,然后返回給 B 一段數(shù)據(jù)「uid=2」。B 之后訪問(wèn) a.com 的時(shí)候,就會(huì)一直帶上「uid=2」這段數(shù)據(jù)。

借此,a.com 的服務(wù)器就能區(qū)分 A 和 B 兩個(gè)用戶(hù)了。

  1. 第二個(gè)作用是記錄歷史。
    假設(shè) a.com 是一個(gè)購(gòu)物網(wǎng)站,當(dāng) A 在上面將商品 A1 、A2 加入購(gòu)物車(chē)時(shí),JS 可以改寫(xiě) Cookie,改為「uid=1; cart=A1,A2」,表示購(gòu)物車(chē)?yán)镉?A1 和 A2 兩樣商品了。

這樣一來(lái),當(dāng)用戶(hù)關(guān)閉網(wǎng)頁(yè),過(guò)三天再打開(kāi)網(wǎng)頁(yè)的時(shí)候,依然可以看到 A1、A2 躺在購(gòu)物車(chē)?yán)?,因?yàn)闉g覽器并不會(huì)無(wú)緣無(wú)故地刪除這個(gè) Cookie。

借此,就達(dá)到里記錄用戶(hù)操作歷史的目的了。

session是什么

當(dāng)一個(gè)用戶(hù)打開(kāi)淘寶登錄后,刷新瀏覽器仍然展示登錄狀態(tài)。服務(wù)器如何分辨這次發(fā)起請(qǐng)求的用戶(hù)是剛才登錄過(guò)的用戶(hù)呢?這里就使用了session保存狀態(tài)。用戶(hù)在輸入用戶(hù)名密碼提交給服務(wù)端,服務(wù)端驗(yàn)證通過(guò)后會(huì)創(chuàng)建一個(gè)session用于記錄用戶(hù)的相關(guān)信息,這個(gè) session 可保存在服務(wù)器內(nèi)存中,也可保存在數(shù)據(jù)庫(kù)中。

  • 創(chuàng)建session后,會(huì)把關(guān)聯(lián)的session_id 通過(guò)setCookie 添加到http響應(yīng)頭部中。
  • 瀏覽器在加載頁(yè)面時(shí)發(fā)現(xiàn)響應(yīng)頭部有 set-cookie字段,就把這個(gè)cookie 種到瀏覽器指定域名下。
  • 當(dāng)下次刷新頁(yè)面時(shí),發(fā)送的請(qǐng)求會(huì)帶上這條cookie, 服務(wù)端在接收到后根據(jù)這個(gè)session_id來(lái)識(shí)別用戶(hù)。
    cookie 是存儲(chǔ)在瀏覽器里的一小段「數(shù)據(jù)」,而session是一種讓服務(wù)器能識(shí)別某個(gè)用戶(hù)的「機(jī)制」,session 在實(shí)現(xiàn)的過(guò)程中需要使用cookie。 二者不是同一維度的東西。

cookie 雖然很方便,但是使用 cookie 有一個(gè)很大的弊端,cookie 中的所有數(shù)據(jù)在客戶(hù)端就可以被修改,數(shù)據(jù)非常容易被偽造,那么一些重要的數(shù)據(jù)就不能存放在 cookie 中了,而且如果 cookie 中數(shù)據(jù)字段太多會(huì)影響傳輸效率。為了解決這些問(wèn)題,就產(chǎn)生了 session,session 中的數(shù)據(jù)是保留在服務(wù)器端的。
session 的運(yùn)作通過(guò)一個(gè) session_id 來(lái)進(jìn)行。session_id 通常是存放在客戶(hù)端的 cookie 中,比如在 express 中,默認(rèn)是 connect.sid 這個(gè)字段,當(dāng)請(qǐng)求到來(lái)時(shí),服務(wù)端檢查 cookie 中保存的 session_id 并通過(guò)這個(gè) session_id 與服務(wù)器端的 session data 關(guān)聯(lián)起來(lái),進(jìn)行數(shù)據(jù)的保存和修改
這意思就是說(shuō),當(dāng)你瀏覽一個(gè)網(wǎng)頁(yè)時(shí),服務(wù)端隨機(jī)產(chǎn)生一個(gè) 1024 比特長(zhǎng)的字符串,然后存在你 cookie 中的 connect.sid 字段中。當(dāng)你下次訪問(wèn)時(shí),cookie 會(huì)帶有這個(gè)字符串,然后瀏覽器就知道你是上次訪問(wèn)過(guò)的某某某,然后從服務(wù)器的存儲(chǔ)中取出上次記錄在你身上的數(shù)據(jù)。由于字符串是隨機(jī)產(chǎn)生的,而且位數(shù)足夠多,所以也不擔(dān)心有人能夠偽造。偽造成功的概率比坐在家里編程時(shí)被鄰居家的狗突然闖入并咬死的幾率還低。

localStorage 是什么

  1. localStorage HTML5本地存儲(chǔ)web storage特性的API之一,用于將大量數(shù)據(jù)(最大5M)保存在瀏覽器中,保存后數(shù)據(jù)永遠(yuǎn)存在不會(huì)失效過(guò)期,除非用 js手動(dòng)清除。
  2. 不參與網(wǎng)絡(luò)傳輸。
  3. 一般用于性能優(yōu)化,可以保存圖片、js、css、html 模板、大量數(shù)據(jù)。
  4. localstorage在隱私模式下不可讀取
  5. localstorage本質(zhì)是在讀寫(xiě)文件,數(shù)據(jù)多的話會(huì)比較卡(firefox會(huì)一次性將數(shù)據(jù)導(dǎo)入內(nèi)存,想想就覺(jué)得嚇人?。?/li>
  6. localstorage不能被爬蟲(chóng)爬取,不要用它完全取代URL傳參

localstorage的使用

基礎(chǔ)知識(shí)
localstorage存儲(chǔ)對(duì)象分為兩種:

  • sessionStrage: session即會(huì)話的意思,在這里的session是指用戶(hù)瀏覽某個(gè)網(wǎng)站時(shí),從進(jìn)入網(wǎng)站到關(guān)閉網(wǎng)站這個(gè)時(shí)間段,session對(duì)象的有效期就只有這么長(zhǎng)。
  • localStorage: 將數(shù)據(jù)保存在客戶(hù)端硬件設(shè)備上,不管它是什么,意思就是下次打開(kāi)計(jì)算機(jī)時(shí)候數(shù)據(jù)還在。
    兩者區(qū)別就是一個(gè)作為臨時(shí)保存,一個(gè)長(zhǎng)期保存。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. cookie 1.1 什么是cookie cookie 是存儲(chǔ)于訪問(wèn)者的計(jì)算機(jī)中的變量。每當(dāng)同一臺(tái)計(jì)算機(jī)通過(guò)...
    cbw100閱讀 4,196評(píng)論 0 13
  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 17,044評(píng)論 7 186
  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù),用來(lái)跟蹤用戶(hù)的整個(gè)會(huì)話。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,786評(píng)論 1 49
  • 寶雞古稱(chēng)陳倉(cāng),是關(guān)中西端的門(mén)戶(hù),因雞峰山石雞啼鳴得名,境內(nèi)巍巍群山環(huán)繞,渭河平川沖擊,呈東部敞開(kāi)的簸箕形,被譽(yù)為“...
    柏拉圖的春天閱讀 982評(píng)論 1 5
  • 人生一世,也不過(guò)是一個(gè)又一個(gè)二十四小時(shí)的疊加,在這樣寶貴的光陰里,我必須明白自己的選擇。一生短暫,我們無(wú)可辜負(fù)的,...
    時(shí)遇521閱讀 167評(píng)論 0 0

友情鏈接更多精彩內(nèi)容