徹底搞懂Html5本地存儲技術(一)


一、H5之前客戶端本地存儲的實現

1、 cookies

cookies的應用比較廣泛,但有以下幾個問題:

(1)每次http請求頭上會帶着,浪費資源

(2)每個域名客戶端只能存儲4K大小 

(3)會造成主Domain污染

(4)cookies明文傳輸很不安全

2、UserData(只有IE支持)

3、其他非主流方案

二、H5相關的存儲知識

1、本地存儲WebStorage (localstorage & sessionstorage)

瀏覽器支持情況

(1)生命周期

  •  localstorage永久存儲除非顯示移除或清空,sessionstorage在頁面會話期有效關閉頁面會被清除(刷新頁面不會清除);

(2)API(ls和ss相同)

  • length //storage內鍵值對數量 只讀
  • setItem //添加鍵值對 key value
  • getItem //根據key獲取鍵值對
  • key  //鍵名 可以根據index屬性獲取鍵名
  • removeItem //根據key移除鍵值對
  • clear //清空

(3)存儲類型及大小

  • webStorage之存儲字符串(只要能被序列化為字符串都可以)
  • 每個域名下5M

(4)storage事件

webStorage發生改變時觸發storage事件

  • key:鍵名
  • oldValue:修改之前的value
  • newValue:修改之后的value
  • url:觸發改動的頁面url
  • StorageArea:發生改變的Storage

(5)使用注意事項

  • 不同瀏覽器數據存儲是相互獨立的,chrome的localStorage在ff上訪問不了
  • 使用時要檢測瀏覽器是否支持(不要使用window.localStorage檢測對象是否存在,應該set一條數據然后進行異常捕獲)
  • 由於ls是永久存儲,要做好更新策略,控制過期
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function  set(key,vel){
     var  curTime =  new  Date().getTime();
     localStorage.setItem( key , JSON.stringify({data:vel , time:curTime }) );
}
 
function  get(key,exp){
     var  data = locaStorage.getItem(key);
     var  dataObj = JSON.parse(data);
     if ( new  Date().getTime()-dataObj.time<exp){
         return  dataObj.data;
     } else {
         alert( '已過期!' );
     }
} 
  • 子域名之間是不能共享數據的-使用跨域方法傳輸數據

特別注意:

webstorage雖好但是並不是用來完全替代cookies,它應該用在原本不應該用cookies但是不得已用了cookies的情況下。

有WebStorage后cookie應只做它應該做的事情——作為客戶端與服務器交互的通道,保持客戶端狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM