[转帖]Mootools源码分析-26 -- Cookie

原帖地址:http://space.flash8.net/space/?uid-18713-action-viewspace-itemid-404552

原作者:我佛山人

 

/*
Cookie的读写其实主要就是字符串的操作
*/
var Cookie = new Class({
    
//setOptions接口实现
    Implements: Options,
    options: {
        
//限制Cookie读取时的路径
        path: false,
        
//限制Cookie读取时的域
        domain: false,
        
//指定Cookie保存的时间,单位默认为天,不指定时跟浏览器进程绑定
        duration: false,
        
//是否要求安全性
        secure: false,
        
//指定Cookie对象所属的document对象
        document: document
    },
    
//构造函数,key为保存在Cookie中的识别键,出现相同时将覆盖旧数据
    initialize: function(key, options)    {
        
this.key = key;
        
this.setOptions(options);
    },

    
//写Cookie
    write: function(value)    {
        
//URI编码,避免乱码
        value = encodeURIComponent(value);
        
//如果指定Cookie的共享域
        if (this.options.domain)    value += '; domain=' + this.options.domain;
        
//如果指定Cookie的共享路径
        if (this.options.path)     value += '; path=' + this.options.path;
        
//如果指定Cookie的保存时间
        if (this.options.duration)    {
            
var date = new Date();
            
//转为天单位
            date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
            value 
+= '; expires=' + date.toGMTString();
        }
        
//要求安全性
        if (this.options.secure)    value += '; secure';
        
//写入Cookie
        this.options.document.cookie = this.key + '=' + value;
        
return this;
    },

    
//读Cookie
    read: function()    {
        
//当前域的Cookie都在一个以分号";"分隔的等式组组成的字符串中,因此需要作字符串处理
        var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
        
//对应写Cookie时的encodeURIComponent
        return (value) ? decodeURIComponent(value[1]) : null;
    },

    
//删除Cookie
    dispose: function()    {
        
//通过写入空的字符串,并且设置过期时间为负值删除指定键的Cookie
        new Cookie(this.key, $merge(this.options, {duration: -1})).write('');
        
return this;
    }
});

//静态方法,写Cookie
Cookie.write = function(key, value, options)    {
    
return new Cookie(key, options).write(value);
};
//静态方法,读Cookie
Cookie.read = function(key)    {
    
return new Cookie(key).read();
};
//静态方法,删除Cookie
Cookie.dispose = function(key, options)    {
    
return new Cookie(key, options).dispose();
};

 

posted @ 2009-11-06 22:30  webgis松鼠  阅读(175)  评论(0编辑  收藏  举报