<!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>