Web持久化存儲Web SQL、Local Storage、Cookies(常用)


在瀏覽器客戶端記錄一些信息,有三種常用的Web數據持久化存儲的方式,分別是Web SQL、Local Storage、Cookies。

Web SQL

作為html5本地數據庫,可通過一套API來操縱客戶端的數據庫(關系數據庫),下面是支持瀏覽器情況。

鑒於PC瀏覽器支持情況,我找了淘寶、京東、攜程、起點、優酷網站,並沒有用Web SQL記錄客戶端信息。在移動端比較適用,特別是對於Hybrid應用,更是得心應手。

接口:

openDatabase

transaction

executeSql

1.打開連接並創建數據庫

var dataBase = openDatabase("student", "1.0", "學生表", 1024 * 1024, function () { });

2.創建數據表

dataBase.transaction( function(tx) {
    tx.executeSql(
    "create table if not exists stu (id REAL UNIQUE, name TEXT)",
    [],
    function(tx,result){ alert('創建stu表成功'); },
    function(tx, error){ 
        alert('創建stu表失敗:' + error.message);

    });
});    

3.添加數據

dataBase.transaction(function (tx) {
    tx.executeSql(
    "insert into stu (id, name) values(?, ?)",
    [1, '徐明祥'],
    function () { alert('添加數據成功'); },
    function (tx, error) { 
        alert('添加數據失敗: ' + error.message);
    });
});

4.查詢數據

dataBase.transaction(function (tx) {
    tx.executeSql(
    "select * from stu", [],
    function (tx, result) { //執行成功的回調函數
        //在這里對result 做你想要做的事情吧...........
    },
    function (tx, error) {
        alert('查詢失敗: ' + error.message)
    });
});

特點:

1.有事務

2.查詢數據,返回數據類型正確

3.被W3C丟棄的規范,但被廣泛支持。

Local Storage

HTML5提供了沒有時間限制在客戶端存儲數據的手段,以鍵值對存取,網站只能訪問其自身的數據,瀏覽器支持如下。

PS:截圖來自網上資料

有個比較有趣的東西,我在起點、京東、優酷的localStorage找個共同的變量,就是jw_bl,里面的數據是(我猜不到這個屬性是什么簡寫的):

{"created" : "Sat Nov 14 2015 23:52:10 GMT+0800 (中國標准時間)" , "expiration" : "Sat, 21 Nov 2015 10:51:54 -0500" , "reason" : "0"}

寫數據:

localStorage.pagecount=123;

讀數據:

localStorage.pagecount;  // return "123"

PS:要注意的是,獲取localStorage的值是字符串,不管你賦值的是什么類型。

特點:

1. 獲取值是字符串類型

2. 容量有大約5M限制

注意是總數據量,屬性個數不限,我試過寫到100000條數據(val僅兩個字符),是可以寫入的。

3. 不會進行網絡傳輸

Cookies

Cookies是最常用的Web數據持久化手段,所有瀏覽器都支持。Cookie是由服務器端生成,發送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給服務器(前提是瀏覽器設置為啟用cookie)。單點登錄(SSO)是個很經典的使用。

PS:當然也可以在網頁設置cookies

Cookie數量和長度的限制

每個domain最多只能有20條(某些瀏覽器會多一些)cookie,每個cookie長度不能超過4KB,否則會被截掉。

Cookie生命周期

Cookie在生成時就會被指定一個Expire值,這就是Cookie的生存周期,在這個周期內Cookie有效,超出周期Cookie就會被清除。將Cookie的生存周期設置為“0”或負值,就馬上清除Cookie。

Cookie安全性問題

如果cookie被人攔截了,那人就可以取得所有的session信息。即使加密也與事無補,因為攔截者並不需要知道cookie的意義,他只要原樣轉發cookie就可以達到目的了。或者是可收集這些信息做一些事。

Cookies請求附帶

Cookies每次請求會被發送到服務器,占用額外帶寬,示例參數如下(截了一個斗魚網站請求的圖)。

PS:cookies參數需要使用抓包工具(類似fiddler)才能看到,Chrome開發者調試工具看不到的。

 

Cookies的Javascript編程

下面代碼來自網上資料:

創建cookies:

function setCookie(c_name,value,expiredays)
{

     var exdate=new Date();
     exdate.setDate(exdate.getDate()+expiredays);
     document.cookie=c_name+"="+escape(value)+((expiredays==null)?"":";expires="+exdate.toGMTString());

}

取值cookies:

function getCookie(c_name)
{
     if(document.cookie.length>0) {

          c_start=document.cookie.indexOf(c_name+"=");
          if(c_start!=-1) {
               c_start=c_start+c_name.length+1;
               c_end=document.cookie.indexOf(";",c_start);
               if(c_end==-1)
                    c_end=document.cookie.length;
               return unescape(document.cookie.substring(c_start,c_end));
          }
     }
     return "";
}

刪除cookies:

setCookie("acf_nickname", null , -1);

清除所有cookies:

因為cookies值可能存在“;=”字符,所以清除的函數還沒一那么簡單,要照着自己工程看着寫。

總結

Web SQL一般在移動端使用,localStorage PC和移動端都適用,而cookies是所有持久化存儲支持最好的。可根據它們本身的特性選擇自己需要使用的方式。

 

本文為原創文章,轉載請保留原出處,方便溯源,如有錯誤地方,謝謝指正。

本文地址 :http://www.cnblogs.com/lovesong/p/4976233.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM