/*
* Cookie类
*/
/*
* 构造函数 -- 用指定的名字和可选的性质为指定的document创建一个Cookie对象
*
* @param document: (必需)保存Cookie的Document对象
* @param name : (必需)指定Cookie名的字符串
* @param hours : (可选)Cookie的生存时间
* @param path : (可选)Cookie的路径(可见范围)
* @param domain : (可选)Cookie的域
* @param secure : (可选)是否安全
*/
function Cookie(document, name, hours, path, domain, secure) {
// 该对象所有预定义的属性都以为"_"开头, 以和存储在Cookie中的属性值区分开
this._document = document;
this._name = name;
// Cookie的生存期
if(hours)
this._expiration = new Date(new Date()).getTime() + hours.60*60*1000;
else
this._expiration = null;
// Cookie的路径
if(path)
this._path = path;
else
this._path = null;
// Cookie的域
if(domain)
this._domain = domain;
else
this._domain = null;
// 安全性
if(secure)
this._secure = secure;
else
this._secure = null;
}
/*
* 存储
*/
Cookie.prototype.store = function() {
// 首先遍历cookie对象的所有属性, 并将cookie值连接起来.
// 由于cookie将 '=' 和 ';' 作为分隔符,
// 所以我们使用 ':' 和 '&' 来分隔存储在单个cookie值中的状态变量.
// 注意,我们对每个状态变量的值进行了转义,以防它含有标点符号或其他非法字符.
var cookieVal = "";
for(var property in this) {
// 忽略所有名字以 '_' 开头的属性和所有方法
if((property.charAt(0)=='_') || (typeof this[property])=='function')
continue;
if(cookieVal != "")
cookieVal += '&';
cookieVal += property + ':' + escape(this.[property]);
}
}
/*
*
*/
Cookie.prototype.load = function() {
// 首先得到属于该文档的所有cookie列表.
// 通过读Document.cookie属性可以实现这一点
var allCookies = this._document.cookie;
if(allCookies == "")
return false;
// 下面从该列表中提取已命名的cookie
var start = allCoolkies.indexOf(this._name + '=');
if(start == -1)
return false;
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对象中的状态变量的名字和值
// 注意我们对属性值调用了unescape()方法,因为存储它们时调用了escape()方法.
for(var i=0; i<a.length; i++)
this[a[i][0]] = unescape(a[i][1]);
return true;
}
/*
*
*/
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._domain.cookie = cookie;
}