//JavaScript:Cookie脚本化封装的典型应用
<script language=javascript type="text/javascript">
//构造函数:用指定的名字和可选的性质为指定的文档创建一个cookie对象.
//参数:
//document:保存cookie的Document对象.必需的.
//name: 指定cookie名的字符串.必需的.
//hours: 一个可选的数字,指定从现在起到cookie过期的小时数.
//path: 一个可选的字符串,指定了cookie的路径性质.
//domain: 一个可选的字符串,指定了cookie域性质.
//secure: 一个可选的布尔值,如果为true,需要一个安全的cookie.
//
function Cookie(document,name,hours,path,domain,secure)
{
//该对象所有定义的属性都以'$'开头,
//这是为了与存储在Cookie中的属性值区别开.
this.$document = document;
this.$name = name;
if (hours)
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.prototype.store = function()
{
var cookieval = "";
for(var prop in this)
{
//忽略所有名字以"$"开头的属性和所有方法.
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"+this.$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('&'); //分割成名字/值对.
for(var i=0;i<a.length;i++) //把每对值存入数组.
{
a[i] = a[i].split(':');
}
//既然我们已经解析了cookie值
//就可以设置cookie对象中的状态变量的名字和值
for(var i=0;i<a.length;i++)
{
this[a[i][0]]=unescape(a[i][1]);
}
//完成了,返回成功代码
return true;
}
//该函数是cookie对象的remove方法.
Cookie.prototype.remove = function()
{
var cookie;
var today = new Date();
cookie = this.$name +'=';
if(this.$path) cookie += ";path"+this.$path;
if(this.$domain) cookie +=";domain"+this.$domain;
cookie += ";"+today.toGMTString();
this.$document.cookie = cookie;
}
var visitordata = new Cookie(document,"name_color",240,"","",true);
//如果cookie 没有被定义,或者它没有我们需要的数据,就向用户查询数据,
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++;
//保存cookie的值,即使它们已经被保存过,
//以便为这位经常访问的用户将过期日期重置为10天
//此外,注意再次保存它们以保存更新的访问状态变量
visitordata.store();
//下面我们可以便用读到的状态变量:
document.write('<font size="7" color="'+visitordata.color+'">'+
'Welcome, '+visitordata.name+'!'+'</font>'+
'<p>You have visited '+visitordata.visits+' times');
</Script>
<form><input type="button" value="Forget My Name"/ οnclick="visitordata.remove()"></form>