1. 程式人生 > >LocalStorage和sessionStorage之間的區別

LocalStorage和sessionStorage之間的區別

        眾所周知,自從HTML 5 標準出現之後,本地化儲存一度成為熱搜的關鍵詞。在HTML 5 最開始時,本地儲存有兩種方式:一種是web Storage,另一種是web SQL。由於web SQL的實現是基於SQLite,它更傾向於DataBase方向,且W3C官方在2011年11月宣佈不在維護web SQL規範,故其API介面目前已經不屬於HTML 5的範疇。因此,目前我們常講的HTML 5本地儲存,多指的是web Storage。

       下面,關於WebStorage及其兩種形式作具體的描述和講解。

       1、web Storage

web Storage 是HTML 5引入的一個重要的功能,在前端開發的過程中會經常用到,它可以在客戶端本地儲存資料,類似cookie,但其功能卻比cookie強大的多。cookie的大小隻有4Kb左右(瀏覽器不同,大小也不同),而web Storage的大小有5MB。其API提供的方法有以下幾種:

        setItem (key, value) ——  儲存資料,以鍵值對的方式儲存資訊。

        getItem (key) ——  獲取資料,將鍵值傳入,即可獲取到對應的value值。

        removeItem (key) ——  刪除單個數據,根據鍵值移除對應的資訊。

        clear () ——  刪除所有的資料

        key (index) —— 獲取某個索引的key

       2、localStorage

        localStorage的生命週期是永久性的。假若使用localStorage儲存資料,即使關閉瀏覽器,也不會讓資料消失,除非主動的去刪除資料,使用的方法如上所示。localStorage有length屬性,可以檢視其有多少條記錄的資料。使用方法如下:

     var storage = null;
         if(window.localStorage){              //判斷瀏覽器是否支援localStorage
            storage = window.localStorage;     
            storage.setItem("name", "Rick");    //呼叫setItem方法,儲存資料
            alert(storage.getItem("name"));     //呼叫getItem方法,彈框顯示 name 為 Rick
            storage.removeItem("name");     //呼叫removeItem方法,移除資料
            alert(storage.getItem("name"));   //呼叫getItem方法,彈框顯示 name 為 null

         }

       localStorage 相對sessionStorage簡單一點,需要注意的地方不是很多。

       3、sessionStorage

  sessionStorage 的生命週期是在瀏覽器關閉前。也就是說,在整個瀏覽器未關閉前,其資料一直都是存在的。sessionStorage也有length屬性,其基本的判斷和使用方法和localStorage的使用是一致的。需要注意的有以下幾點:

       <1> 頁面重新整理不會消除資料

       為了驗證,我準備了兩個html檔案,一個是index.html,另一個是text.html。至於text.html後面在詳細說其起的左右。二者的html程式碼如下:

index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Test</title>
        <script>
            function submit() {
                var str = document.getElementById("text").value.trim();
                setInfo(str);
                document.getElementById("text").value = "";
            }
            //儲存資料
            function setInfo(name) {
                var storage = window.sessionStorage;
                storage.setItem('name', name);
            }
            //顯示資料
            function shows() {
               var storage = window.sessionStorage;
               var str = "your name is " + storage.getItem("name");
               document.getElementById("text").value = str;
            }
         </script>
    </head>
    <body>
         <input type="button" value="Login" onclick="submit()" />
         <input type="text" name="text" id="text" />
         <input type="button" value="show" onclick="shows()" />
         <a href="text.html" target="_blank">點選開啟</a>
    </body>
    </html>
       text.html頁面如下:
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>Title</title>
     </head>
     <body>
         <script>
             var storage = window.sessionStorage;
             alert(storage.getItem("name"));
         </script>
     </body>
     </html>

      開啟index.html頁面的結果如下:

                      

       當點選show按鈕後,輸入框內顯示 “ your name is null“,此時sessionStorage中沒有儲存鍵值為 ”name“的資料。當在文字中輸入”Rick“後,點選login按鈕,輸入框清空的時候資料已經儲存到sessionStorage中,然後再去點選show按鈕,會顯示”your name is Rick“。此時,點選瀏覽器重新整理網頁,再點選show按鈕,輸入框中顯示的依舊為”your name is Rick“

       <2>只有在當前頁面開啟的連結,才可以訪sessionStorage的資料;

       還記準備好的那個text.html頁面嗎,這個時候輪到它發揮自己的作用了。為了驗證,我們接著上面的步驟,開啟text.html結果如下:

                          

       可以看到,這個值為null,無法得到”name“的值。現在,關閉這個text.html頁面,通過index.html頁面中的點選開啟連結,可以看到如下的結果:

                           

        因此,可以得知,在當前頁面開啟的連結,是可以訪問到sessionStorage內的資料。後來又經過其他一些測試,發現當從index.html開啟text.html頁面後,關閉index.html,重新整理text.html還可以訪問到sessionStorage中的資料。只有當全部關閉index.html和從其內部開啟的所有頁面 或者直接關閉瀏覽器,才可以消除sessionStorage中的資料。

<3>使用window.open開啟頁面和改變localtion.href方式都可以獲取到sessionStorage內部的資料

上述兩種方式,經過測試,事實確實如此。感興趣的同學,可以真實的測試下結果。關於localStorage和sessionStorage的不同之處,就不再做總結了。

       總之,使用的時候,注意以上提到的幾點,在使用的時候可以避免很多沒必要踩的坑。關於本文有什麼不到的地方,歡迎留言批評和指正,謝謝。