天天看點

javascript中的cookie使用(javascript權威指南)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

<SCRIPT LANGUAGE="JavaScript">

<!--

//cookie的存儲,例如:下面時設定終止日期。

var nextyear=new Date();

nextyear.setFullYear(nextyear.getFullYear()+1);

document.cookie="version="+document.lastModified+";expires="+nextyear.toGMTString();

//-->

</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">

<!--

//cookie的讀取

//讀cookie屬性,這将傳回文檔的所有cookie

var allcookies=document.cookie;

//查找名為的的開始位置

var pos=allcookies.indexOf("version=");

if(pos!=-1){

 var start=pos+8;

 var end=allcookies.indexOf(";",start);

 if(end==-1) end=allcookies.length;

 var value=allcookies.substring(start,end);

 value=unescape(value);  //escape()函數用于編碼, unescape()用于解碼

    //既然我們已經有了cookie的值,就可以使用它。

 //在這種情況下,cookies之前被設定為文檔的修改日期。

 if(value!=document.lastModified)  //lastModified一個字元串對象,包含文檔的最近修改日期

  alert("this document has changed since you were last here");

 else

  alert("this document has not changed");

}

//-->

</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">

<!--

 //使用cookie時的一個工具類(面向對象,原型)

 //構造函數:用指定的名字和可選的性質為指定的文檔建立一個cookie對象。

 //參數:

 //document:儲存cookie的Document對象,必須的。

 //name:指定cookie名的字元串。必須的。

 //hours:一個可選的數字,指定從現在起到過期時間的小時數

 //path:一個可選的字元串,指定了cookie的路徑性質

 //domain:一個可選的字元串,指定了cookie的域性質

 //secure:一個可選的布爾值,為true ,需要一個安全的cookie

 function Cookie(document, name, hours, path, domain, secure)

{

    // 該對象的所有預定義的屬性都以'$'開頭。

    // 這是為了與存儲在cookie中的屬性值區分開。

    this.$document = document;

    this.$name = name;

    if (hours)  //當字元串為空時,為false, 不為空時,為true

        this.$expiration = new Date((new Date()).getTime() + hours*3600000);

    else this.$expiration = null;

    if (path) this.$path = path; else this.$path = null;

    if (domain) this.$domain = domain; else this.$domain = null;

    if (secure) this.$secure = true; else this.$secure = false;

}

// 該函數是cookie對象的 store() 方法。

Cookie.prototype.store = function () {

    // 首先,周遊cookie對象的屬性,并且将cookie值連接配接起來。

    // 由于cookie将等号和分号作為分隔符。

    // 是以我們使用冒号和&來分隔存儲在單個cookie值中的狀态變量。

    // 注意:我們對每個狀态變量的值進行了轉義,以防它含有标點符号或其它非法字元。

    var cookieval = "";

    for(var prop in this) {

        // 忽略所有名字以$開頭的屬性和所有方法(typeof的用法)

        if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function'))

            continue;

        if (cookieval != "") cookieval += '&';

        cookieval += prop + ':' + escape(this[prop]);

    }

    // 既然我們已經有了cookie隻,就可以連接配接完成的cookie串。

 //其中包括名字和建立cookie對象時指定的各種性質.

    var cookie = this.$name + '=' + cookieval;

    if (this.$expiration)

        cookie += '; expires=' + this.$expiration.toGMTString();

    if (this.$path) cookie += '; path=' + this.$path;

    if (this.$domain) cookie += '; domain=' + this.$domain;

    if (this.$secure) cookie += '; secure';

    // 下面設定Document.cookie屬性來儲存cookie 

    this.$document.cookie = cookie;

}

// 該函數是cookie對象的load()方法

Cookie.prototype.load = function() {

    // 首先得到屬于該文檔的所有cookie的清單,

    // 通過讀Document.cookie屬性可以實作這一點.

    var allcookies = this.$document.cookie;

    if (allcookies == "") return false;

    // 下面從該清單中提取已命名的cookie.

    var start = allcookies.indexOf(this.$name + '=');

    if (start == -1) return false;   // 該頁未定義cookie

    start += this.$name.length + 1;  // 跳過名字和等号.

    var end = allcookies.indexOf(';', start);

    if (end == -1) end = allcookies.length;

    var cookieval = allcookies.substring(start, end);

    // 既然我們已經提取出了已命名的cookie 的值,就可以把它分割存儲到狀态變量名和值.

 // 名字/值對由&分隔,名字和值之間則由冒号分隔.

 //我們使用split()方法解析所有資料.

    var a = cookieval.split('&');//a 表示一個數組了    // 分隔成名字/值對.

    for(var i=0; i < a.length; i++)  // 把每對值存入數組.

        a[i] = a[i].split(':'); //a表示二維數組

    // 既然我們已經解析了cookie值

    // 就可以設定cookie對象中的狀态變量的名字和值.

    // 注意我們對屬性值調用了unescape(),因為存儲它們時調用了escape()方法.

    for(var i = 0; i < a.length; i++) {

        this[a[i][0]] = unescape(a[i][1]);  //a[][]參數從0開始.

    }

    // 傳回成功

    return true;

}

// 該函數是cookie對象的remove() 方法.

Cookie.prototype.remove = function() {

    var cookie;

    cookie = this.$name + '=';

    if (this.$path) cookie += '; path=' + this.$path;

    if (this.$domain) cookie += '; domain=' + this.$domain;

    cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';

    this.$document.cookie = cookie;  //原來的被覆寫了.

}

//-->

</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">

<!--

//  使用該工具類的執行個體

var visitordata = new Cookie(document, "name_color_count_state", 240);   //240小時就是10天

if (!visitordata.load() || !visitordata.name || !visitordata.color) {

    visitordata.name = prompt("What is your name:", "");

    visitordata.color = prompt("What is your favorite color:", "");

}

// 跟蹤這個使用者通路了多少次該頁面:

if (visitordata.visits == null) visitordata.visits = 0;

 visitordata.visits++;

visitordata.store();

document.write('<font size="7" color="' + visitordata.color + '">' +

               'Welcome, ' + visitordata.name + '!' +

               '</font>' +

               '<p>You have visited ' + visitordata.visits + ' times.');

//-->

</SCRIPT>

</HEAD>

<BODY>

<form>

<input type="button" value="Forget My Name" οnclick="visitordata.remove();">

</form>

</BODY>

</HTML>

繼續閱讀