Cookie 的含義
Cookie(復(fù)數(shù)形態(tài)Cookies)箱残,中文名稱為“小型文字檔案”或“小甜餅”
指某些網(wǎng)站為了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過加密)朽合。定義于RFC2109。是網(wǎng)景公司的前雇員盧·蒙特利在1993年3月的發(fā)明[2]。
Cookie 的分類
-
內(nèi)存Cookie:
內(nèi)存Cookie由瀏覽器維護稠氮,保存在內(nèi)存中,瀏覽器關(guān)閉后就消失了,其存在時間是短暫的秩仆。
-
硬盤Cookie:
硬盤Cookie保存在硬盤里,有一個過期時間猾封,除非用戶手工清理或到了過期時間澄耍,硬盤Cookie不會被刪除,其存在時間是長期的晌缘。
所以齐莲,按存在時間,可分為非持久Cookie和持久Cookie磷箕。
Cookie 的用途
因為HTTP協(xié)議是無狀態(tài)的选酗,即服務(wù)器不知道用戶上一次做了什么,這嚴重阻礙了交互式Web應(yīng)用程序的實現(xiàn)岳枷。
那么芒填,怎么理解它的 **無狀態(tài) **呢?
舉個例子:
當(dāng)用戶登錄某個網(wǎng)站的時候空繁,它會提示 “是否保存賬號密碼氢烘?”,如果選擇是家厌,那么下一次選擇同一個網(wǎng)站的時候就不用再次輸入賬號密碼了播玖。
這正是因為前一次登錄時,服務(wù)器發(fā)送了包含登錄憑據(jù)(用戶名加密碼的某種加密形式)的Cookie到用戶的硬盤上饭于。第二次登錄時蜀踏,如果該Cookie尚未到期维蒙,瀏覽器會發(fā)送該Cookie,服務(wù)器驗證憑據(jù)果覆,于是不必輸入用戶名和密碼就讓用戶登錄了颅痊。
這時候理解 無狀態(tài),就好多了局待,因為每次打開瀏覽器訪問同一個網(wǎng)站的時候斑响,它都認為是第一次訪問,然后要輸入賬號密碼設(shè)置相關(guān)信息啥的钳榨,他不知道你是【熟人】而無法免去一些繁雜的程序舰罚,而 Cookie 的出現(xiàn)就是幫助它 【記住你】,下一次訪問相同的網(wǎng)站的時候就可以走 “快速通道” 啦~
Cookie 的智能識別
如果在一臺計算機中安裝多個瀏覽器薛耻,每個瀏覽器都會以獨立的空間存放Cookie营罢。因為Cookie中不但可以確認用戶信息,還能包含計算機和瀏覽器的信息饼齿。
所以一個用戶使用不同的瀏覽器登錄或者用不同的計算機登錄饲漾,都會得到不同的Cookie信息,另一方面缕溉,對于在同一臺計算機上使用同一瀏覽器的多用戶群考传,Cookie不會區(qū)分他們的身份,除非他們使用不同的用戶名登錄证鸥。
Cookie 的不足
- 傳輸臃腫:Cookie會被附加在每個HTTP請求中伙菊,所以無形中增加了流量。
- 安全性:由于在HTTP請求中的Cookie是明文傳遞的敌土,所以安全性成問題,除非用HTTPS运翼。
- 大小限制:Cookie的大小限制在4KB左右返干,對于復(fù)雜的存儲需求來說是不夠用的。
Cookie 在瀏覽器的位置
Cookie 的風(fēng)險
雖然Cookies沒有中電腦病毒那么危險拖云,但它仍包含了一些敏感訊息:用戶名兼耀、電腦名询一、使用的瀏覽器和曾經(jīng)訪問的網(wǎng)站。用戶不希望這些內(nèi)容泄漏出去癌淮,尤其是當(dāng)其中還包含有私人信息的時候。
這并非危言聳聽沦补,跨網(wǎng)站指令碼(Cross site scripting)可以達到此目的乳蓄。在受到跨網(wǎng)站指令碼攻擊時,Cookie盜賊和Cookie毒藥將竊取內(nèi)容夕膀。一旦Cookie落入攻擊者手中虚倒,它將會重現(xiàn)其價值美侦。
- Cookie盜賊:搜集用戶Cookie并發(fā)給攻擊者的黑客,攻擊者將利用Cookie訊息通過合法手段進入用戶帳戶魂奥。
- Cookie投毒:一般認為菠剩,Cookie在儲存和傳回服務(wù)器期間沒有被修改過,而攻擊者會在Cookie送回服務(wù)器之前對其進行修改耻煤,達到自己的目的具壮。例如,在一個購物網(wǎng)站的Cookie中包含了顧客應(yīng)付的款項哈蝇,攻擊者將該值改小棺妓,達到少付款的目的。
Cookie 的結(jié)構(gòu)
類似于 [ key: value ]
的結(jié)構(gòu)买鸽。如圖:
或者在控制臺輸入 console.log(document.cookie)
也可以看到 Cookie 信息涧郊。
Cookie 的特點
- 服務(wù)器通過 Set-Cookie 響應(yīng)頭設(shè)置 Cookie
- 瀏覽器得到 Cookie 之后,每次請求都要帶上 Cookie
- 服務(wù)器讀取 Cookie 就知道登錄用戶的信息(email)
小結(jié)
用自己的話來理解 Cookie眼五,可以舉個例子說明:
同學(xué)A去公園妆艘,一開始他去的時候,進去和出來都沒有人認識他看幼,和普通人一樣批旺,互不干擾,沒有聯(lián)系诵姜,這就是最初的 【無狀態(tài)】
那么汽煮,為了更好的識別游客的身份,公園開始改革棚唆,需要游客憑門票入園暇赤,游客的身份信息明文寫在門票上,然后入園的時候給門衛(wèi)檢查許可后入園宵凌,而這個 【門票】 的比喻鞋囊,就是我們所說的Cookie 。
Cookie 的優(yōu)點好比這張門票瞎惫,上面記錄了用戶的身份信息溜腐,同時門票的使用期限和地點耶限定在一定的范圍內(nèi)。
Cookie 最大的缺點也可以通過門票的比喻可以看到瓜喇,因為是明文挺益,用戶可以自己修改核心信息,以達到非法的目的乘寒。泄露了用戶隱私的同時也損壞了公園的利益望众。
參考資料 :
- Cookie-維基百科
- Cookie 是什么
- 推薦閱讀 HTTP cookie
- 推薦閱讀 Cookie 阮一峰