localStorage sessionStorage 和cookie等前端存儲方式總結

来源:http://www.cnblogs.com/chentging/archive/2017/08/10/7340672.html
-Advertisement-
Play Games

localStorage sessionStorage 和cookie localStorage localStorage是本地存儲的,除非清空本地數據 localStorage不會自動把數據發給伺服器,僅在本地保存。 localStorage只能存字元串,任何類型存儲的時候都會被自動轉換成字元串 ...


localStorage sessionStorage 和cookie

localStorage

localStorage是本地存儲的,除非清空本地數據
localStorage不會自動把數據發給伺服器,僅在本地保存。

localStorage只能存字元串,任何類型存儲的時候都會被自動轉換成字元串

使用方式(localStorage是window的屬性)

  1. 設置localStorage鍵值對

    localStorage.name = 'zhangsan';//存儲一個鍵值對

    localStorage.name = 'lisi';//name新值會覆蓋舊值

    localStorage['年齡'] = 23;//key是中文就使用這種方式

    localStorage['404'] = '你迷路了';//key是數字就用這種方式

    localStorage.setItem('email','[email protected]');//使用setItem函數創建一個鍵值對

  2. 根據localStorge鍵取用值

    console.log(localStorage.name);
    console.log(localStorage['年齡']);
    console.log(localStorage['404']);
    console.log(localStorage.getItem('name'));
    //通過key()函數獲取鍵值對中的key
    console.log(localStorage.key(index));

  3. 清除localStorage

    //清除特定的鍵值對
    console.log(localStorage.removeItem('name'));//清除name的值
    //清除所有鍵值對
    localStorage.clear();

sessionStorage

sessionStorage只伴隨著session,視窗一旦關閉就沒了
sessionStorage不會自動把數據發給伺服器,僅在本地保存。
sessionStorage不在不同的瀏覽器視窗中共用,即使是同一個頁面

localStorage只能存字元串,任何類型存儲的時候都會被自動轉換成字元串

使用方式(localStorage是window的屬性)

設置,取值,清除都和localStorage完全一樣

Web SQL Database

  1. 簡介

    Web SQL DatabaseAPI實際上未包含在HTML 5規範之中,它是一個獨立的規範,它引入了一套使用SQL操作客戶端資料庫的API,這些API有同步的,也有非同步的,同步版本的API只在工作線程(Worker Threads)上有用,由於並不是所有的瀏覽器都支持工作線程,一般情況下,都會使用非同步API。它的核心方法有三個:openDatabase,transaction和executeSql。這些API已經被廣泛的實現在了不同的瀏覽器里,尤其是手機端瀏覽器。雖然W3C官方在2011年11月聲明已經不再維護Web SQL Database規範,但由於其廣泛的實現程度,瞭解這些API對 Web開發還是非常有必要的
  2. Web SQL Database核心方法介紹
    • openDatabase()方法打開一個已經存在的資料庫連接,如果資料庫不存在,則創建一個新的數資料庫

      var db = openDatabase('mydb','1.0','my database',1024*1024);

      4個參數的意義(資料庫名、版本號、資料庫說明、資料庫大小單位byte(資料庫大小可變)、創建回滾)

      註意:如果資料庫已經創建,第五個參數將會進行回滾操作。如果省略此參數,仍能創建
    • 用database.transaction()方法執行SQL語句,該函數只有一個參數是負責執行查詢的函數
    • 查詢函數有一個事務類型的參數tx
    • 事務參數tx具有一個函數:executeSql(),這個函數有4個參數
      1. 表示查詢的SQL字元串
      2. 插入到查詢SQL字元串中問號所在處的字元串參數
      3. 查詢執行成功時執行的函數
      4. 查詢失敗時執行的函數
      5. 執行成功的函數有兩個參數:tt,事務性參數;result,執行的返回結果
      6. 執行錯誤的函數也有兩個:tt,事務性參數,error,錯誤的對象

        實例:
        var db = openDatabase('mydb','1.0','my database',1024*1024);
        if (db) {} //可以判斷是否成功連接上資料庫
        db.transaction(function(tx) {
            //創建一個表
            tx.executeSql('create table if not exists accountTab(name TEXT,age INTEGER,email TEXT)',[],
            function() {},
            function(tx,error) {
                console.log(error.source + ':' +error.message);//遇到錯誤列印出錯誤信息
            });
            //插入數據
            tx.executeSql('insert into accountTab values(?,?,?)',['zhangsan',23,'[email protected]']);
            //查詢數據
            tx.executeSql('select * from accountTab',[],function(tt,rs) {
                //迴圈結果集
                for(var i = 0; i < rs.rows.length;i++) {
                    console.log(rs.rows);//輸出結果集
                }
            });
        
        });
  • cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和伺服器間來回傳遞
  • cookie數據還要路徑(path)的概念,可以限制cookie只屬於某個路徑下
  • 存儲大小有限制,cookie數據不能超過4K,因為每次http請求都會攜帶cookie,所以cookie適合保存很小的數據
  • sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大
  • cookie只在設置的cookie過期時間之前一直有效,即使視窗或瀏覽器關閉

    cookie的應用

  1. 保存用戶登錄狀態:例如將用戶id存儲於一個cookie內,這樣當用戶下次訪問該頁面時就不需要重新登錄了,現在很多論壇和社區都提供這樣的功能。 cookie還可以設置過期時間,當超過時間期限後,cookie就會自動消失
  2. 定製頁面。如果網站提供了換膚或更換佈局的功能,那麼可以使用cookie來記錄用戶的選項,例如:背景色、解析度等。當用戶下次訪問時,仍然可以保存上一次訪問的界面風格。
  3. 創建購物車。正如在前面的例子中使用cookie來記錄用戶需要購買的商品一樣,在結賬的時候可以統一提交。例如淘寶網就使用cookie記錄了用戶曾經瀏覽過的商品,方便隨時進行比較
  1. 傳遞方式
    • cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和伺服器間來回傳遞

    • sessionStorage和localStorage不會自動把數據發給伺服器,僅在本地保存
  2. 數據大小
    • cookie數據還有路徑(path)的概念,可以限制cookie只屬於某個路徑下

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

    • sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大
  3. 數據有效期
    • sessionStorage:僅在瀏覽器視窗(或者標簽頁)關閉前有效(即:視窗關閉之前滿足同源策略下都有效果)
      • 所以你刷新這個頁面前進後退(前進後退得保證同源策略)
    • localStorage:始終有效,視窗或標簽頁關閉也一直保存(除非主動刪除數據),因此用作持久數據

    • cookie只在設置的cookie過期時間之前一直有效,即使視窗或瀏覽器關閉
  4. 作用域不同
    • sessionStorage每個視窗的值都是獨立的(每個視窗都有自己的數據),它的數據會隨著視窗的關閉而消失,視窗間的sessionStorage也是不可以共用的(就是,你再打開一個標簽頁,同樣的地址,也不會共用)

    • localStorage 在所有同源頁面中都是共用的(前提是相同瀏覽器,別一個是谷歌瀏覽器,一個火狐瀏覽器,然後打開同一個頁面說不是共用的哈哈)也就是能跨頁不能跨域

    • cookie也是在所有同源視窗中都是共用的
  5. cookie的封裝,我推薦大家使用cookie相關的插件(當然有時間也可以自己封裝,網上也很多)

    http://www.cnblogs.com/jicheng/p/5946460.html

    http://www.cnblogs.com/kissdodog/archive/2012/12/14/2818827.html

    http://blog.csdn.net/canglingyue/article/details/52386196

web本地存儲事件監聽

當程式修改localStorage與sessionStorage時將觸發全局事件。

當setItem(),removeItem()或者clear() 方法被調用,並且數據真的發生了改變時,就會觸發storage事件,如果需要進行監聽數據處理,通過以下方法:
window.addEventListener(event,handleEvent, capture)
event:設置成storage
handleEvent:事件處理函數
capture:事件處理順序,一般設置成false,表示採用冒泡方式處理

handleEvent處理事件的函數會接收到一個StorageEvent對象,該對象有以下屬性:
key:被修改的鍵。
oldValue:修改前的值(如果是增加新的鍵值,則該屬性為null)
newValue:修改後的值(如果是刪除鍵值,則該屬性為null)
url/uri:觸發當前存儲事件的頁面的url

註意:storage改變的時候,觸發這個事件會調用所有同域下其他視窗的storage事件,不過它本身觸發storage即當前視窗是不會觸發這個事件的(當然ie這個特例除外,它包含自己本事也會觸發storage事件)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 百度版lol百科小樣 ...
  • 0、未完,還有一部分未寫 1、CSS背景 屬性 描述 background 簡寫屬性,作用是將背景屬性設置在一個聲明中。 background-attachment 背景圖像是否固定或者隨著頁面的其餘部分滾動。 background-color 設置元素的背景顏色。 background-image ...
  • 非空驗證 <body> <table> <tr> <td>姓名:</td> <td><input type="text" name="TrueName" id="TrueName" /></td> </tr> ....省略其他input <tr> <td colspan="2"> <input ty ...
  • jsp:<div class="form-group"> <label >交易時間:</label> <input placeholder="開始日期" class="form-control layer-date" id="startDate" name="startDate"> <input p ...
  • 今天學習了PHP數組,整理下相關知識點。 PHP數組是什麼? php數組是一個能在單個變數中存儲多個值的特殊變數。 如:你有一個項目清單(人名清單),將其存儲到單個變數中,如下: 如果這個清單裡面有上百號人名,你要從中找到指定的某一個這樣會有點麻煩了。 解決這個問題的辦法就是創建一個數組。 數組可以 ...
  • 為什麼在input標簽類型為file上傳文件時在標簽中設置屬性 accpet="image/*",打開本地文件夾的速度特別慢? 經過測試發現,在mac裡面safari、Firefox、Chrome(opera不知道為啥老閃退)都沒有卡頓問題 在windows裡面,Firefox不卡頓,只有Chrom ...
  • 前言 首先第一步,先佈局html代碼如下: 上面一看第一個圖片img 就是實現圖片模糊效果的DOM元素,text-gradient實現的是流彩文字效果的DOM元素,border實現的是邊框伸展效果的DOM元素 想一想樣式該咋寫呢,根據這個佈局,我們先來實現圖片模糊效果。 圖片模糊效果 圖片模糊效果要 ...
  • [1]監聽事件 [2]事件修飾符 [3]滑鼠修飾符 [4]鍵值修飾符 [5]修飾鍵 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...