導(dǎo)言
隨著Javascript的復(fù)雜應(yīng)用和即將推出的的標(biāo)準(zhǔn)和技術(shù),web應(yīng)用程序變得越來越先進(jìn)。我們不斷依賴這些應(yīng)用程序,它們中的大部分已成為我們?nèi)粘I钪械囊徊糠帧T赪eb應(yīng)用程序開發(fā)中,有一個領(lǐng)域一直很匱乏--客服端存儲數(shù)據(jù)的能力。直到現(xiàn)在還是這樣。
網(wǎng)絡(luò)存儲是一個W3c規(guī)范,它提供了在客服端存儲數(shù)據(jù)的能力,直到最后一個會話(會話存儲)或局部存儲。這遠(yuǎn)比傳統(tǒng)的cookie強大,也更容易操作。在這篇文章中,我們將了解它并學(xué)會使用它。
當(dāng)前的問題:cookie不堪其重
在繼續(xù)深入之前,讓我們對當(dāng)前在客戶端存儲數(shù)據(jù)的方式cookie作一個簡要的回顧,它存在以下問題:
其他與cookie相關(guān)的不常用的技術(shù)包括查詢字符串、隱藏表單域、基于Flash的本地共享對象,每一個都涉及到安全、易用性、大小限制等一系列相關(guān)問題。所以直至現(xiàn)在,我們一直使用非常糟糕的方式在客戶端存儲數(shù)據(jù)。我們需要一個更好的方式來完成這一切,這就是網(wǎng)絡(luò)存儲的用武之地。
網(wǎng)絡(luò)存儲
W3C的網(wǎng)絡(luò)存儲規(guī)范設(shè)計了一種在客戶端存儲數(shù)據(jù)的更好的方法。它有兩個不同的存儲類型:會話存儲和本地存儲。
這兩種存儲方式在每個域中大約能存儲5MB的數(shù)據(jù),這明顯多于Cookie。正如我們將要看到的那樣,我們將更深入的了解它們,并明白是什么使得網(wǎng)絡(luò)存儲成為一個最好的存儲機制。
會話存儲
會話存儲只有一個目的:在你的會話中記住所有數(shù)據(jù),并在你關(guān)閉選項卡(或窗口)時盡快忘掉它。
設(shè)置和獲取數(shù)據(jù)
要在會話存儲中設(shè)置鍵值對,你只需要寫一行這樣的代碼:
sessionStorage.setItem(yourkey, yourvalue);
在此獲取數(shù)據(jù),只需要這樣做:
var item = sessionStorage.getItem(yourkey);
在會話存儲中存儲值“This is a sample sentence”,你可以這樣寫:
sessionStorage.setItem(1, 'This is a sample sentence');
注意,這里的key值為1,但并不意味著它是第一個值,它只是將數(shù)字“1”轉(zhuǎn)換成字符“1”,并用它作為key值,但這并不意味著將鍵值對放在第一的位置。 |
用javascript的alert方法獲取那句話,你可以寫:
var item = sessionStorage.getItem(1);
alert(item);
另一個setItem()的例子:
sessionStorage.setItem('name', 'john');
你可以用它來獲取:
var name = sessionStorage.getItem('name');
刪除和清除數(shù)據(jù)
也有一些從網(wǎng)絡(luò)存儲中刪除和清除數(shù)據(jù)的方法,removeItem()方法用于從列表中刪除一個特定項。
var item = sessionStorage.removeItem(yourkey);
記住,你也可以只引用一個數(shù)據(jù)項的鍵值,然后從列表中刪除它:
var items = sessionStorage.removeItem(1);
clear()方法用來清除列表中的所有項,你可以使用以下方式:
sessionStorage.clear();
您還可以使用length屬性來找出存儲中鍵/值對的數(shù)量,如:
var no_of_items = sessionStorage.length;