web數據存儲


隨着web應用程序的出現,產生了要直接在客戶端存儲用戶信息能力的需求。下邊就是幾種具體的解決方案。

一、Cookie

  cookie最初是用於在客戶端存儲會話信息的,該標準要求服務器對任意HTTP請求(沒有cookie頭部)發送Set-Cookie頭部作爲響應的一部分。當瀏覽器接受到響應以後根據頭部信息,設置一個cookie並存儲。當瀏覽器再次對該服務器發送請求時,就會爲請求添加Cookie頭部。對cookie更加詳細的描述如下:
  1、限制
  cookie是綁定在特定域名下的,當設定一個cookie後,當給創建它的域名發送請求時纔會包含這個cookie;
  cookie是存儲在客戶端計算機上的,爲了不佔用太多磁盤空間,每個域的cookie總數是有限制的,具體數量限制因瀏覽器不同存在差異;
  瀏覽器對cookie的尺寸也有限制,大多數瀏覽器對cookie的長度限制在4096B(加減1);
  2、cookie的構成
  cookie主要由以下幾塊信息構成:名稱(不區分大小寫)、值、域、路徑、失效時間、安全標誌;安全標誌直接包含了一個單詞secure,設置該標誌以後,只能在SSL連接時才能傳輸。除此以外,其他標誌都由名值對兒構成;
  3、JavaScript中的cookie
  JavaScript中處理cookie時,主要用document.cookie這個屬性:當用來獲取屬性值時,document.cookie返回當前頁面可用的所有cookie的字符串,一系列由分號隔開的名值對兒(所有名字和值都是經過URL編碼的,必須使用decodeURIComponent()來解碼);當用來設置屬性的時候,document.cookie屬性可以設置一個新的cookie字符串。並添加到現有的cookie集合中;
  4、子cookie
  爲了繞開瀏覽器的單域名下的cookie數量限制,開發人員採用子cookie的方法。子cookie是存放在單個cookie中的更小段數據。

二、IE用戶數據

  IE5.0中,微軟引入了持久化用戶數據的概念,用戶數據允許每個文檔最多128KB,每個域名最多1MB的數據。要使用持久化用戶數據,首先要使用CSS在某個元素上指定userData行爲,然後就可以使用setAttribute()方法在上邊保存數據,最後調用save()方法將數據保存到瀏覽器緩存中,save的參數爲保存到數據空間的名稱。舉例如下:
<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>
  下一次載入頁面後,可以使用load()方法指定同樣的數據空間名稱(本例的BookInfo)來獲取數據。

三、Web存儲機制

  Web Storage規範如今已經成爲HTML5的一部分。主要是用來克服由cookie帶來的一些限制:當數據需要被嚴格控制在客戶端上時,無須持續地將數據發回服務器。它的兩個主要目的是:
  提供一種在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:鍵被更改之前的值;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章