JavaScript:Cookie脚本化封装的典型应用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值