一个比较容易调用 功能比较完善的 cookie 操作类
附带一些简单的应用示例
var axtic = axtic || {};
axtic.Cookie = {
/*
函数名称:axtic.Cookie.Get([string name])
函数功能:得到Cookie
参数:name 可选项,要取得的Cookie名称
说明:name为空时将通过数组形式返回全部Cookie,name不为空时返回此Cookie名称的值,没有任何值时返回undefined
*/
Get : function(name){
var cv = document.cookie.split("; ");//使用"; "分割Cookie
var cva = [], cvat = [], cvam = [], temp;
/*循环的得到Cookie名称与值*/
for(i=0; i<cv.length; i++){
temp = cv[i].split("=");//用"="分割Cookie的名称与值
if(temp[0].indexOf("_divide_") > 0){
cvam[temp[0]] = temp[1];
}else{
if(temp[0] != "") cvat[i] = [temp[0], temp[1]];
}
}
for(i=0; i<cvat.length; i++){
if(cvat[i]){
if(cvat[i][1].substr(0,8) != "^divide|"){
/*小于4K的Cookie处理*/
cva[cvat[i][0]] = unescape(cvat[i][1]);
}else{
/*大于4K的Cookie处理*/
var sta = cvat[i][1].indexOf("$"), tot = cvat[i][1].substring(8,sta);
cva[cvat[i][0]] = cvat[i][1].substring(sta+1);
for(j=1; j<tot; j++){
cva[cvat[i][0]] += cvam[cvat[i][0]+"_divide_"+j];
}
cva[cvat[i][0]] = unescape(cva[cvat[i][0]]);
}
}
}
if(name) return cva[name];//如果有name则输出这个name的Cookie值
//else return cva;//如果没有name则输出以名称为key,值为Value的数组
else return false;
},
/*
函数名称:axtic.Cookie.Set(string name, string value[, int expires[, string path[, string domain[, string secure]]]])
函数功能:存入Cookie
参数:name 必要项,要存入的Cookie名称
value 必要项,要存入的Cookie名称对应的值
expires 可选项,Cookie的过期时间,可以填入以秒为单位的保存时间,也可以填入日期格式(wdy, DD-Mon-YYYY HH:MM:SS GMT)的到期时间
path 可选项,Cookie在服务器端的有效路径
domain 可选项,该Cookie的有效域名
secure 可选项, 指明Cookie 是否仅通过安全的 HTTPS 连接传送,0或false或空时为假
说明:保存成功则返回true,保存失败返回false
*/
Set : function(name, value, expires, path, domain, secure, divide){
if(!divide) var value = escape(value);
if(!name || !value) return false;//如果没有name和value则返回false
if(name == "" || value == "") return false;//如果name和value为空则返回false
/*对于过期时间的处理*/
if(expires){
/*如果是数字则换算成GMT时间,当前时间加上以秒为单位的expires*/
if(/^[0-9]+$/.test(expires)){
var today = new Date();
expires = new Date(today.getTime()+expires*1000).toGMTString();
/*判断expires格式是否正确,不正确则赋值为undefined*/
}else if(!/^wed, d{2} w{3} d{4} d{2}:d{2}:d{2} GMT$/.test(expires)){
expires = undefined;
}
}
if(name.indexOf("_divide_")< 1 && !divide){
this.Del(name, path, domain);//删除前一次存入的Cookie
}
/*合并cookie的相关值*/
var cv = name+"="+value+";"
+ ((expires) ? " expires="+expires+";" : "")
+ ((path) ? "path="+path+";" : "")
+ ((domain) ? "domain="+domain+";" : "")
+ ((secure && secure != 0) ? "secure" : "");
/*判断Cookie总长度是否大于4K*/
if(cv.length < 4096){
document.cookie = cv;//写入cookie
}else{
/*对于大于4K的Cookie的操作*/
var max = Math.floor(value.length/3800)+1;
for(i=0; i<max; i++){
if(i == 0){
this.Set(name, '^divide|'+max+'$'+value.substr(0,3800), expires, path, domain, secure, true);
}else{
this.Set(name+"_divide_"+i, value.substr(i*3800,3800), expires, path, domain, secure, true);
}
}
}
return true;
},
/*
函数名称:axtic.Cookie.Del(string name[, string path[, string domain]])
函数功能:删除Cookie
参数:name 必要项,要删除的Cookie名称
path 可选项,要删除的Cookie在服务器端的有效路径
domain 可选项,要删除的Cookie的有效域名
说明:删除成功返回true,删除失败返回false
*/
Del : function(name, path, domain){
if(!name) return false;//如果没有name则返回false
if(name == "") return false;//如果name为空则返回false
if(!this.Get(name)) return false;//如果要删除的name值不存在则返回false
/*对于大于4K的Cookie进行处理*/
if(escape(this.Get(name)).length > 3800){
var max = Math.floor(escape(this.Get(name)).length/3800)+1;
for(i=1; i<max; i++){
/*合并Cookie的相关值,并删除*/
document.cookie = name+"_divide_"+i+"=;"
+ ((path) ? "path="+path+";" : "")
+ ((domain) ? "domain="+domain+";" : "")
+ "expires=Thu, 01-Jan-1970 00:00:01 GMT;";
}
}
/*合并Cookie的相关值,并删除*/
document.cookie = name+"=;"
+ ((path) ? "path="+path+";" : "")
+ ((domain) ? "domain="+domain+";" : "")
+ "expires=Thu, 01-Jan-1970 00:00:01 GMT;";
return true;
}
}
/* 应用函数 */
//-----------------------------列表框---------------
//保存列表框的索引到cookie
function setck(ckey,oselect)//(keyname,objSelect)
{
axtic.Cookie.Set(ckey,oselect.selectedIndex,86400);
}
//从cookie读取列表框的索引,移动当前选择项到此索引
function ckselect(ckey,selectid)//(keyname,SelectID)
{
var sselect = document.getElementById(selectid);
var ckvalue = axtic.Cookie.Get(ckey);
if(ckvalue)
{
sselect.options[ckvalue].selected = 1;
}
}
//-----------------------------列表框---------------
//-----------------------------滚动条---------------
//保存列保存滚动条的坐标
function getscroll()
{
var t, l, w, h;
if (document.documentElement && document.documentElement.scrollTop)
{
t = document.documentElement.scrollTop;
l = document.documentElement.scrollLeft;
w = document.documentElement.scrollWidth;
h = document.documentElement.scrollHeight;
}
else if (document.body)
{
t = document.body.scrollTop;
l = document.body.scrollLeft;
w = document.body.scrollWidth;
h = document.body.scrollHeight;
}
return { t: t, l: l, w: w, h: h };
}
//取得当前纵向滚动条并保存到cookie
function scrollsave(scname,scvalue) //scrollsave('scroll',body.scrollTop);
{
axtic.Cookie.Set(scname,scvalue,86400);
//alert("aa");
}
//从cookie取得滚动条纵坐标并移动纵向滚动条到此坐标


