[转帖]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();
};
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();
};