08、HTML5-本地存儲(chǔ)

一、Cookie

  • 什么是Cookie
  數(shù)據(jù)存儲(chǔ)到計(jì)算機(jī)中,通過瀏覽器控制添加與刪除數(shù)據(jù)
  • Cookie特點(diǎn)
  - 存儲(chǔ)限制: 一個(gè)域名Cookie數(shù)是有限的(根據(jù)瀏覽器而定),每個(gè)4kb;
  - Cookie會(huì)包含在每個(gè)HTTP請(qǐng)求中向服務(wù)器發(fā)送,這回導(dǎo)致多次發(fā)送重復(fù)數(shù)據(jù);
  - Cookie在網(wǎng)絡(luò)傳輸時(shí)并未加密,也可能會(huì)有安全隱患;
  - 頁(yè)面間的Cookie是共享的;

二、Storage

使用Storage保存key-value時(shí),key、value都只能是字符串(如果有復(fù)雜數(shù)據(jù),可以將結(jié)構(gòu)化數(shù)據(jù)封裝成JSON,再將JSON對(duì)象轉(zhuǎn)為字符串保存)。

  • sessionStorage
  - session臨時(shí)會(huì)話,從頁(yè)面打開到頁(yè)面關(guān)閉的時(shí)間段;
  - 窗口的臨時(shí)促成了,頁(yè)面關(guān)閉,本地存儲(chǔ)消失;
  • localStorage
  - 永久存儲(chǔ)(可以手動(dòng)刪除數(shù)據(jù))
  • Storage的特點(diǎn)
  - 存儲(chǔ)量限制(5M);
  - 客戶端完成,不會(huì)請(qǐng)求服務(wù)器處理;
  - sessionStorage數(shù)據(jù)是不共享、localStorage共享

三、Storage操作方法

  • setItem()
 - 設(shè)置數(shù)據(jù),key/value類型,類型都是字符串;
 - 可以用獲取屬性的形式操作;

 window.sessionStorage.setItem('name', oText.value);
 window.localStorage.setItem('name', oText.value);
  • getItem()
  - 獲取數(shù)據(jù),通過key來獲取到對(duì)對(duì)應(yīng)的value;

  window.sessionStorage.getItem('name')
  window.localStorage.getItem('name')
  • removeItem()
  - 刪除數(shù)據(jù),通過key來刪除對(duì)應(yīng)的value;
 
  window.sessionStorage.removeItem('name');
  window.localStorage.removeItem('name');
  • clear()
  - 刪除全部存儲(chǔ)的值;

  window.sessionStorage.clear();
  window.localStorage.clear();

案例: 存儲(chǔ)注冊(cè)信息(第一次沒填寫完關(guān)閉,當(dāng)?shù)诙未蜷_時(shí),之前填寫的內(nèi)容還是存在的)
// 當(dāng)窗口關(guān)閉時(shí)觸發(fā)window.onunload = function(){}

四、Storage存儲(chǔ)事件

  • storage事件
  - 當(dāng)有數(shù)據(jù)修改或刪除的情況下,就會(huì)觸發(fā)storage事件
  - 在對(duì)數(shù)據(jù)進(jìn)行改變的窗口對(duì)象是不會(huì)觸發(fā)的
  - key: 修改或刪除的key,如果調(diào)用clear(),key為null
  - newValue: 新設(shè)置的值,如果調(diào)用removeStorage(),key為null
  - oldValue: 調(diào)用改變前的value值
  - storageArea: 當(dāng)前的storage對(duì)象
  - url: 觸發(fā)該腳本變化的文檔的url
  - sessionStorage在同窗口下才可以,例如iframe操作就是同窗口的操作;
  
  // 添加storage事件(本窗口不觸發(fā),在其他窗口觸發(fā))
  window.addEventListener('storage', function(ev){
     ev = ev || window.event;
     console.log('key:' + ev.key);
     console.log('newValue:' + ev.newValue);
     console.log('oldValue:' + ev.oldValue);
     console.log('storageArea:' + ev.storageArea);
     console.log('url:' + ev.url);      
  });

案例: 同步購(gòu)物車(不管哪個(gè)頁(yè)面操作了,但都是同步的)

離線緩存策略

1、localStorage, sessionStorage(字符串鍵值對(duì)在本地存儲(chǔ)數(shù)據(jù),方便靈活,但是對(duì)于大量結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)力不從心)
2、indexedDB (瀏覽器中持久地存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)庫(kù))
3、web sql(已經(jīng)被廢棄)
4、application cache (完全離線資源緩存,加載更快 降低服務(wù)器負(fù)載,單地址頁(yè)面對(duì)實(shí)時(shí)性要求不要的業(yè)務(wù) 離線web應(yīng)用)

之前會(huì)使用cookies,每次的http請(qǐng)求頭中,都會(huì)帶有cookies——缺點(diǎn);每個(gè)域名只能存儲(chǔ)4K大小的cookies;主域名污染: 如果我們使用cookies存儲(chǔ)主域名的東西,那么子域名下得Http請(qǐng)求都會(huì)帶上主域名的東西;如果關(guān)聯(lián)上網(wǎng)絡(luò),那么將帶來安全問題。
所以,通常我們會(huì)使用cookies用在如購(gòu)物車、身份驗(yàn)證等問題上。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容