隨着web應用程序的出現,產生了要直接在客戶端存儲用戶信息能力的需求。下邊就是幾種具體的解決方案。
一、Cookie
cookie是綁定在特定域名下的,當設定一個cookie後,當給創建它的域名發送請求時纔會包含這個cookie;
cookie是存儲在客戶端計算機上的,爲了不佔用太多磁盤空間,每個域的cookie總數是有限制的,具體數量限制因瀏覽器不同存在差異;
瀏覽器對cookie的尺寸也有限制,大多數瀏覽器對cookie的長度限制在4096B(加減1);
cookie主要由以下幾塊信息構成:名稱(不區分大小寫)、值、域、路徑、失效時間、安全標誌;安全標誌直接包含了一個單詞secure,設置該標誌以後,只能在SSL連接時才能傳輸。除此以外,其他標誌都由名值對兒構成;
JavaScript中處理cookie時,主要用document.cookie這個屬性:當用來獲取屬性值時,document.cookie返回當前頁面可用的所有cookie的字符串,一系列由分號隔開的名值對兒(所有名字和值都是經過URL編碼的,必須使用decodeURIComponent()來解碼);當用來設置屬性的時候,document.cookie屬性可以設置一個新的cookie字符串。並添加到現有的cookie集合中;
爲了繞開瀏覽器的單域名下的cookie數量限制,開發人員採用子cookie的方法。子cookie是存放在單個cookie中的更小段數據。
二、IE用戶數據
<div style="behavior: url(#default#userData)" id="dataStore"></div>
<script>
var dataStore=document.getElementById('dataStore');
dataStore.setAttribute('name','Jack');
dataStore.setAttribute('book','JavaScript');
dataStore.save('BookInfo');
</script>
三、Web存儲機制
提供一種在cookie之外存儲會話數據的途徑;
提供一種存儲大量可以跨會話存在的數據的機制
Web Storage規範定義了以下幾個對象。在支持他們的瀏覽器中,以windows對象屬性的形式存在。
1、Storage類型
Storage類型提供最大的存儲空間來存儲名值對兒。其實例有以下方法:
clear():刪除所有值;
getItem():根據指定的名字(name)獲取對應的值;
key(index):獲取index位置處的值的名字;
removeItem(name):刪除由name指定的名值對兒;
setItem(name,value):爲指定的name設定指定的值;
2、sessionStorage對象
sessionStorage對象是Storage的一個實例。用來存儲特定於某個會話的數據,即該數據只保持到瀏覽器關閉。由於該對象綁定於某個服務器會話,所以當文件在本地運行時是不可用的。
3、globalStorage對象
該對象的目的是跨越會話存儲數據,但是有特定的訪問限制,要使用globalStorage,首先要指定哪些域可以訪問該數據
4、localStorage對象
localStorage對象也是Storage的實例,在HTML5規範中作爲持久保存客戶端數據的方案取代了globalStorage。要訪問同一個localStorage對象,頁面必須來自同一個域名(相同子域名無效),使用同一種協議,在同一個端口上。
5、storage事件
對Storage對象做任何修改,都會在文檔上觸發storage事件,這個事件的event對象有以下屬性:
domain:發生變化的存儲空間的域名;
key:設置或者刪除的鍵名;
newValue:如果是設置值,則該屬性值爲新值,如果是刪除鍵,該屬性值爲null;
oldValue:鍵被更改之前的值;