cookies,sessionStorage和localStorage的區別

大家好,我是IT修真院北京分院25期的學員,一枚正直純潔善良的web前端程序員

今天給大家分享一下,修真院官網js任務6,深度思考中的知識點——cookies,sessionStorage和localStorage的區別??

1.背景介紹

SessionStorage, LocalStorage, Cookie這三者都可以被用來在瀏覽器端存儲數據,而且都是字符串類型的鍵值對。

區別在于前兩者屬于WebStorage,創建它們的目的便于客戶端存儲數據。 而Cookie早在網景公司的瀏覽器中就開始支持,最初目的是為了保持HTTP的狀態。

2.知識剖析

Cookie?

HTTP Cookie(也叫Web cookie或者瀏覽器Cookie)是服務器發送到用戶瀏覽器并保存在瀏覽器上的一塊數據,它會在瀏覽器下一次發起請求時被攜帶并發送到服務器上。比較經典的,可以它用來確定兩次請求是否來自于同一個瀏覽器,從而能夠確認和保持用戶的登錄狀態。Cookie的使用使得基于無狀態的HTTP協議上記錄穩定的狀態信息成為了可能。

sessionStorage

sessionStorage 屬性允許你訪問一個 session Storage 對象。它與 localStorage 相似,不同之處在于 localStorage

里面存儲的數據沒有過期時間設置,而存儲在 sessionStorage

里面的數據在頁面會話結束時會被清除。頁面會話在瀏覽器打開期間一直保持,并且重新加載或恢復頁面仍會保持原來的頁面會話。在新標簽或窗口打開一個頁面會初始化一個新的會話,這點和 session

cookies 的運行方式不同。

localStorage

localStorage 屬性允許你訪問一個 local Storage 對象。localStorage 與 sessionStorage 相似。不同之處在于,存儲在 localStorage

里面的數據沒有過期時間(expiration time),而存儲在 sessionStorage 里面的數據會在瀏覽器會話(browsing session)結束時被清除,即瀏覽器關閉時。

3.常見問題

問題:Cookie是如何工作的?

Cookie可用于客戶端數據的存儲,在沒有其它存儲辦法時,使用這種方式是可行的,但隨著現在瀏覽器開始支持各種各樣的存儲方式而逐漸被廢棄。

由于服務器指定Cookie以后瀏覽器的每次請求都會攜帶Cookie數據,這會帶來額外的性能負擔(尤其是在移動環境下)。

新的瀏覽器API已經允許開發者直接在本地存儲數據,如可以使用Web storage API (本地存儲和會話存儲)和IndexedDB(索引數據庫)。

Cookie主要用在以下三個方面:

    會話狀態管理(如用戶登錄狀態、購物車)

    個性化設置(如用戶自定義設置)

    瀏覽器行為跟蹤(如跟蹤分析用戶行為)

    Cookie的缺陷

      每個 HTTP 請求中都包含 Cookies,從而導致傳輸相同的數據減緩我們的 Web 應用程序。

      每個 HTTP 請求中都包含 Cookies,從而導致發送未加密的數據到互聯網上。(除非用HTTPS)

      Cookies 只能存儲有限的 4KB 數據,對于復雜的存儲需求來說是不夠用的。

      LocalStorage和SessionStorage?

      html5中的Web Storage包括了兩種存儲方式:sessionStorage和localStorage。 不會被發送到服務器上。同時空間比Cookie大很多,一般支持5-10M。

      與Cookie類似,每個域名下會有不同的localStorage和SessionStorage實例。

        sessionStorage用于本地存儲一個會話(session)中的數據,這些數據只有在同一個會話中的頁面才能訪問并且當會話結束后(關閉標簽頁,不包括刷新和跳轉)

        數據也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲,僅僅是會話級別的存儲。

        localStorage可以在多個標簽頁中互相訪問用于持久化的本地存儲,可以在多個標簽頁中互相訪問,除非主動刪除數據,否則數據是永遠不會過期的。

        注意SessionStorage中的Session指的是瀏覽器會話,而非服務器端通過Cookie實現的Session。

        Storage的使用

        LocalStorage/SessionStorage也是基于字符串的鍵值對存儲。可以通過setItem,getItem,clear,removeIteml來存取控制數據:

          clear():刪除所有值。

          getItem(name):根據指定的名字name獲取對應的值

          key(index):在指定的數字位置獲取該位置的名字。

          removeItem(name):刪除由name指定的名值對

          setItem(name,value):為指定名字設置一個對應的值

          localStorage.setItem("name","wangerxiao");

          //這樣就用localStorage存儲了一個名字為name的數據,數據的內容為 “wangerxiao"

          localStorage.getItem("name");

          //這樣就讀取了名字為“name”的數據的值。

          但是,storage只能存儲字符串的數據,對于JS中常用的數組或對象卻不能直接存儲。

          var obj = { name:'Jim' };

          sessionStorage.obj = obj;

          localStorage.obj = obj;

          var arr = [1,2,3];

          sessionStorage.obj = arr;

          localStorage.obj = arr;

          注意:上面這種寫法是錯誤的

          但我們可以通過JSON對象提供的parse和stringify將其他數據類型轉化成字符串,再存儲到storage中就可以了。

          var obj = { name:'Jim' };

          var str = JSON.stringify(obj);

          //存入

          sessionStorage.obj = str;

          //讀取

          str = sessionStorage.obj;

          //重新轉換為對象

          obj = JSON.parse(str);

          4.解決方案

          5.編碼實戰

          6.擴展思考


          總結:sessionStorage 、localStorage 和 cookie 之間的異同

          共同點:都是保存在瀏覽器端,且同源的。

          不同點:

            1.cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和服務器間來回傳遞。

            而sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存。cookie數據還有路徑(path)的概念,可以限制cookie只屬于某個路徑下。

            2.存儲大小限制也不同,cookie數據不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合保存很小的數據,如會話標識。

            sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。

              3.數據有效期不同,sessionStorage:僅在當前瀏覽器窗口關閉前有效,自然也就不可能持久保持;localStorage:始終有效,窗口或瀏覽器關閉也一直保存,因此用作持久數據;

              cookie只在設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉。

              4.作用域不同,sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個頁面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。

                5.Web Storage 支持事件通知機制,可以將數據更新的通知發送給監聽者。

                6.Web Storage 的 api 接口使用更方便。

                7.參考文獻

                  參考謝燦勇的博客

                  參考使用sessionStorage、localStorage存儲數組與對象

                  參考請描述一下 cookies,sessionStorage 和 localStorage 的區別?

                  8.更多討論

                  1. 問:angualr如何修改過期時間cookie

                  ? ?答:使用$cookie方法

                  2. 問:storage的API有那些

                  ? ?答:clear(),getItem(),key(),removeItem(),setItem()

                  3. 問:怎樣獲取cookie的存儲內容

                  ? ? 答:$cookieStore.get

                  PPT

                  視頻

                  技能樹.IT修真院

                  “我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。

                  這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧?!

                  猛戳這里

                  最后編輯于
                  ?著作權歸作者所有,轉載或內容合作請聯系作者
                  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
                    沈念sama閱讀 227,572評論 6 531
                  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
                    沈念sama閱讀 98,071評論 3 414
                  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
                    開封第一講書人閱讀 175,409評論 0 373
                  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
                    開封第一講書人閱讀 62,569評論 1 307
                  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
                    茶點故事閱讀 71,360評論 6 404
                  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
                    開封第一講書人閱讀 54,895評論 1 321
                  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
                    沈念sama閱讀 42,979評論 3 440
                  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
                    開封第一講書人閱讀 42,123評論 0 286
                  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
                    沈念sama閱讀 48,643評論 1 333
                  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
                    茶點故事閱讀 40,559評論 3 354
                  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
                    茶點故事閱讀 42,742評論 1 369
                  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
                    沈念sama閱讀 38,250評論 5 356
                  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
                    茶點故事閱讀 43,981評論 3 346
                  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
                    開封第一講書人閱讀 34,363評論 0 25
                  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
                    開封第一講書人閱讀 35,622評論 1 280
                  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
                    沈念sama閱讀 51,354評論 3 390
                  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
                    茶點故事閱讀 47,707評論 2 370