1. 程式人生 > >LocalStorage本地儲存和sessionStorage會話儲存

LocalStorage本地儲存和sessionStorage會話儲存

用過HTML5 LocalStorage本地儲存和sessionStorage的,你就感覺Html5很強大,比cookie和session好用很多,下面讓我們來學習這個知識吧...

最早的Cookies自然是大家都知道,問題主要就是太小,大概也就4KB的樣子,而且IE6只支援每個域名20cookies,太少了。優勢就是大家都支援,而且支援得還蠻好。很早以前那些禁用cookies的使用者也都慢慢的不存在了,就好像以前禁用的使用者不存在了一樣。

首先自然是檢測瀏覽器是否支援本地儲存。在HTML5中,本地儲存是一個window的屬性,包括localStoragesessionStorage

,從名字應該可以很清楚的辨認二者的區別,前者是一直存在本地的,後者只是伴隨著session,視窗一旦關閉就沒了。二者用法完全相同,這裡以localStorage為例。

if(window.localStorage){
 alert('This browser supports localStorage');
}else{
 alert('This browser does NOT support localStorage');
}

儲存資料的方法就是直接給window.localStorage新增一個屬性,例如:window.localStorage.a 或者 window.localStorage["a"]

。它的讀取、寫、刪除操作方法很簡單,是以鍵值對的方式存在的,如下:

localStorage.a = 3;//設定a"3"
localStorage["a"] = "sfsf";//設定a"sfsf",覆蓋上面的值
localStorage.setItem("b","isaac");//設定b"isaac"
var a1 = localStorage["a"];//獲取a的值
var a2 = localStorage.a;//獲取a的值
var b = localStorage.getItem("b");//獲取b的值
localStorage.removeItem("c");//清除c的值

這裡最推薦使用的自然是getItem()

setItem(),清除鍵值對使用removeItem()。如果希望一次性清除所有的鍵值對,可以使用clear()。另外,HTML5還提供了一個key()方法,可以在不知道有哪些鍵值的時候使用,如下:

var storage = window.localStorage;
function showStorage(){
 for(var i=0;i<storage.length;i++){
  //key(i)獲得相應的鍵,再用getItem()方法獲得對應的值
  document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "<br>");
 }
}

需要注意的是,HTML5本地儲存只能存字串,任何格式儲存的時候都會被自動轉為字串,所以讀取的時候,需要自己進行型別的轉換。這也就是上一段程式碼中parseInt必須要使用的原因。

另外,在iPhone/iPad上有時設定setItem()時會出現詭異的QUOTA_EXCEEDED_ERR錯誤,這時一般在setItem之前,先removeItem()ok了。

HTML5的本地儲存,還提供了一個storage事件,可以對鍵值對的改變進行監聽,使用方法如下:

if(window.addEventListener){
 window.addEventListener("storage",handle_storage,false);
}else if(window.attachEvent){
 window.attachEvent("onstorage",handle_storage);
}
function handle_storage(e){
 if(!e){e=window.event;}
 //showStorage();
}

對於事件變數e,是一個StorageEvent物件,提供了一些實用的屬性,可以很好的觀察鍵值對的變化,如下表:

 Property

 Type

 Description

 key

 String

 The named key that was added, removed, or moddified

 oldValue

 Any

 The previous value(now overwritten), or null if a new item was added

 newValue

 Any

 The new value, or null if an item was added

 url/uri

 String

 The page that called the method that triggered this change

這裡新增兩個鍵值對ab,並增加一個按鈕。給a設定固定的值,當點選按鈕時,修改b的值:

<body>
<p>You have viewed this page <span id="count">0</span>  time(s).</p>
<p><input type="button" value="changeStorage" onClick="changeS()"/></p>
<script>
var storage = window.localStorage;
if (!storage.getItem("pageLoadCount")) storage.setItem("pageLoadCount",0);
storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) + 1;//必須格式轉換
document.getElementByIdx_x("count").innerHTML = storage.pageLoadCount;
showStorage();
if(window.addEventListener){
 window.addEventListener("storage",handle_storage,false);
}else if(window.attachEvent){
 window.attachEvent("onstorage",handle_storage);
}
function handle_storage(e){
 if(!e){e=window.event;}
 showObject(e);
}
function showObject(obj){
 //遞迴顯示object
 if(!obj){return;}
 for(var i in obj){
  if(typeof(obj[i])!="object" || obj[i]==null){
   document.write(i + " : " + obj[i] + "<br/>");
  }else{
   document.write(i + " : object" + "<br/>");
  }
 }
}
storage.setItem("a",5);
function changeS(){
 //修改一個鍵值,測試storage事件
 if(!storage.getItem("b")){storage.setItem("b",0);}
 storage.setItem('b',parseInt(storage.getItem('b'))+1);
}
function showStorage(){
 //迴圈顯示localStorage裡的鍵值對
 for(var i=0;i<storage.length;i++){
  //key(i)獲得相應的鍵,再用getItem()方法獲得對應的值
  document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "<br>");
 }
}
</script>
</body>

sessionStorage和上文中提到的localStorage非常相識,方法也幾乎一樣:

非常通俗易懂的介面:

  • sessionStorage.getItem(key):獲取指定key本地儲存的值
  • sessionStorage.setItem(key,value):將value儲存到key欄位
  • sessionStorage.removeItem(key):刪除指定key本地儲存的值
  • sessionStorage.length是sessionStorage的專案數

sessionStorage與 localStorage 的異同

sessionStorage 和 localStorage 就一個不同的地方, sessionStorage資料的儲存僅特定於某個會話中,也就是說資料只保持到瀏覽器關閉,當瀏覽器關閉後重新開啟這個頁面時, 之前的儲存已經被清除。而 localStorage 是一個持久化的儲存,它並不侷限於會話。

sessionStorage和localStorage提供的key()和length可以方便的實現儲存的資料遍歷,例如下面的程式碼:

1 var storage = window.localStorage;
2 for (var i=0, len = storage.length; i < len; i++){
3 var key = storage.key(i);
4 var value = storage.getItem(key);
5 console.log(key + "=" + value);
6 }

sessionStorage 和 localStorage的clear()函式的用於清空同源的本地儲存資料,比如localStorage.clear(),它將刪除所有同源的本地存 儲的localStorage資料,而對於Session Storage,它只清空當前會話儲存的資料。

關閉頁面會導致 sessionStorage 的資料被清除,但重新整理或重新開啟新頁面資料還是存在,如果需要儲存的只是少量的臨時資料。我們可以使用sessionStorage 。或者做頁面間的小互動。

sessionStorage 和 localStorage具有相同的方法storage事件,在儲存事件的處理函式中是不能取消這個儲存動作的。儲存事件只是瀏覽器在資料變化發生之後給 你的一個通知。當setItem(),removeItem()或者clear() 方法被呼叫,並且資料真的發生了改變時,storage事件就會被觸發。注意這裡的的條件是資料真的發生了變化。也就是說,如果當前的儲存區域是空的,你 再去呼叫clear()是不會觸發事件的。或者你通過setItem()來設定一個與現有值相同的值,事件也是不會觸發的。當儲存區域發生改變時就會被觸 發,這其中包含許多有用的屬性:

  • storageArea: 表示儲存型別(Session或Local)
  • key:發生改變項的key
  • oldValue: key的原值
  • newValue: key的新值
  • url*: key改變發生的URL

    * 注意: url 屬性早期的規範中為uri屬性。有些瀏覽器釋出較早,沒有包含這一變更。為相容性考慮,使用url屬性前,你應該先檢查它是否存在,如果沒有url屬性,則應該使用uri屬性
    如果呼叫clear()方法,那麼key、oldValue和newValue都會被設定為null。

相關推薦

LocalStorage本地儲存sessionStorage會話儲存

用過HTML5 LocalStorage本地儲存和sessionStorage的,你就感覺Html5很強大,比cookie和session好用很多,下面讓我們來學習這個知識吧... 最早的Cookies自然是大家都知道,問題主要就是太小,大概也就4KB的樣子,而且IE

localStoragesessionStorage儲存資料

在HTML5中,新加入了一個localStorage特性,這個特性主要是用來作為本地儲存來使用的,解決了cookie儲存空間不足的問題(cookie中每條cookie的儲存空間為4k),localStorage中一般瀏覽器支援的是5M大小,這個在不同的瀏覽器中localStorage會有所不同。

HTML sessionStorage會話儲存

   sessionStorage 是HTML5新增的一個會話儲存物件,用於臨時儲存同一視窗(或標籤頁)的資料,在關閉視窗或標籤頁之後將會刪除這些資料。本篇主要介紹 sessionStorage(會話儲存)的使用方式。包括新增、修改、刪除等操作。 目錄 1. 介紹

HTML5 sessionStorage會話儲存

   sessionStorage 是HTML5新增的一個會話儲存物件,用於臨時儲存同一視窗(或標籤頁)的資料,在關閉視窗或標籤頁之後將會刪除這些資料。本篇主要介紹 sessionStorage(會話儲存)的使用方式。包括新增、修改、刪除等操作。 目錄 1. 介紹   1.1 說明   1.2 特點

tensor flow 模型儲存回覆,儲存精度最高的模型,python 程式碼

將訓練好的模型引數儲存起來,以便以後進行驗證或測試,這是我們經常要做的事情。tf裡面提供模型儲存的是tf.train.Saver()模組。 模型儲存,先要建立一個Saver物件:如 saver=tf.train.Saver() 在建立這個Saver物

資料結構與演算法(二)-線性表之單鏈表順序儲存鏈式儲存

前言:前面已經介紹過資料結構和演算法的基本概念,下面就開始總結一下資料結構中邏輯結構下的分支——線性結構線性表 一、簡介 1、線性表定義   線性表(List):由零個或多個數據元素組成的有限序列;   這裡有需要注意的幾個關鍵地方:     1.首先他是一個序列,也就是說元素之間是有個先來後到的。

雜湊儲存、B樹儲存LSM樹儲存引擎

1、雜湊儲存引擎  是雜湊表的持久化實現,支援增、刪、改以及隨機讀取操作,但不支援順序掃描,對應的儲存系統為key-value儲存系統。對於key-value的插入以及查詢,雜湊表的複雜度都是O(1),明顯比樹的操作O(n)快,如果不需要有序的遍歷資料,雜湊表就是your M

資料庫為什麼會分為“行式儲存“列式儲存”呢?

我們知道 當今的資料處理大致可分為兩大類 聯機事務處理 OLTP (on-line transaction processing) 以及聯機分析處理 OLAP (On-Line Analytical Processing) OLTP 是傳統關係型資料庫的主要應用 用來執行一些基本的、日常的事務處

行式儲存列式儲存的比較

行式儲存的優點: 同一行資料存放在同一個block塊裡面,select * from table_name;資料能直接獲取出來;  INSERT/UPDATE比較方便 行式儲存的缺點: 不同型別資料存放在同一個block塊裡面,壓縮效能不好; select id,name

佇列的順序儲存鏈式儲存

佇列的基本概念 1.定義:佇列是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表。 2.佇列是一種先進先出的線性表,簡稱FIFO。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。front指標指向對頭元素,rear指標指向隊尾的下一個位置。當fron

線性表、棧、佇列的的順序儲存鏈式儲存

先概括一下線性表順序儲存和鏈式儲存。 線性表的順序儲存是用一組地址連續的儲存單元依次儲存線性表的資料元素。 線性表的鏈式儲存是用指標將儲存線性表中的資料元素的那些單元依次串聯在一起。 接下來圖片說明。

Hive部分:行式儲存列式儲存的比較

行式儲存和列式儲存的比較: 列式儲存(Columnar or column-based)是相對於傳統關係型資料庫的行式儲存(Row-basedstorage)來說的。簡單來說兩者的區別就是如何組織表: Ø  Row-based storage stores atabl

大端儲存小端儲存,網路位元組序

一、大端、小端 "大端"和"小端"表示多位元組值的哪一端儲存在該值的起始地址處;小端儲存在起始地址處,即是小端位元組序;大端儲存在起始地址處,即是大端位元組序; 或者說: 1.小端法(Little-Endian)就是低位位元組排放在記憶體的低地址端(即該值的起始地址),高

我看Openstack的臨時(Ephemeral)儲存塊(Block)儲存

背景 Openstack不管是Ephemeral Storage還是Block Storage, 其實從介面上看,其實都是塊服務。那麼為什麼要搞兩個不同的型別呢,本文從這兩種不同型別塊儲存的實現上來分析下其中的原因。 臨時儲存 Openstack臨時儲存是由Nova提供的

大端儲存小端儲存及基於c語言的測試函式

大端模式是什麼?小端模式又是什麼?對系統哪些方面有影響?又如何來檢視我的電腦到底是大端還是小端呢?這些問題在文中都將獲得解決,一起來看看吧。首先我們來介紹一下概念:大端模式(Big_endian):字資料的高位元組儲存在低地址中,而字資料的低位元組儲存在高地址中。如下圖。小端

線性表的順序儲存鏈式儲存差異

線性表的順序儲存和鏈式儲存方式在存讀資料以及插入刪除資料時,時間複雜度不同。順序儲存的典型例子為陣列,鏈式儲存的典型例子為單鏈表。眾所周知,當讀取資料較為頻繁時,我們選擇順序儲存方式,當插入和刪除操作較為頻繁時,我們選擇鏈式儲存方式。接下來,我們將分析這樣做的原因:1.順序儲

資料結構 線性表中,順序儲存鏈式儲存的優缺點

簡單對順序儲存和鏈式儲存結構做對比:   儲存分配方式; 順序儲存用一段連續的儲存單元一次儲存線性表的資料元素。                          鏈式儲存採用鏈式儲存結構,用一組任意的儲存單元存放線性表的元素。時間複雜度衡量;               

獲取手機內建儲存外掛sdcard儲存路徑可用空間以及總空間大小的方式

在網上找了好多資料都是執行“執行mount命令,獲取日誌,並進行篩選” 其實真正做起來還要根據廠家的手機做不同的篩選條件,太過於麻煩。 一種簡單帥氣的獲取方法如下 下面的getExternalSDRoot()<span style="font-family: Ari

【Vue】vuex儲存本地儲存(localstoragesessionstorage)的區別

1. sessionStorage    sessionStorage 方法針對一個 session 進行資料儲存。當用戶關閉瀏覽器視窗後,資料會被刪除。   用法:      儲存: 1. 點(.)運算子     

localStorage本地儲存)與sessionStorage會話儲存)的區別與方法

localStorage生命週期是永久,使用者除非在瀏覽器上刪除localStorage的資訊,否則這些資訊將永遠存在於瀏覽器中。存放資料大小為一般為5MB, 而且它僅在客戶端(即瀏覽器)中儲存,不參與和伺服器的通訊。 sessionStorage僅在當前會話