//cookie相关函数
try {
var basePath = window.document.location.pathname.substring(0,window.document.location.pathname.indexOf('/',1));
if(basePath.indexOf("/") == -1){
basePath = '/' + basePath;
}
}catch(e) {
alert("获取basePath出错, e.description: " + e.description);
throw e;
}
var __path = basePath;
function CookieTools() {
var globalCookie = new CookieSet(5, 4000, "__c");
/**
* 获取指定名称cookie值
* @param name 指定cookie名称
*/
this.getCookie = function(name) {
return globalCookie.getValue(name);
};
/**
* 设置cookie值,用不过期(100年)
* @param name 指定cookie名称
* @param value cookie值
*/
this.setNeverOverdueCookie = function(name, value) {
globalCookie.setValue(name, value);
};
/**
* 设置cookie值
* @param name 指定cookie名称
* @param value cookie值
*/
this.setCookie = function(name, value) {
setNeverOverdueCookie(name, value);
};
/**
* 删除cookie
* @param name 指定cookie名称
*/
this.deleteCookie = function(name) {
globalCookie.deleteValue(name);
};
}
/******************************************************
1.CookieSet负责存取页面所有的cookie
2.内建指定数量的存储单元空间,这些存储单元空间命名由CookieSet自己规定
3.当一个存储单元空间将要超出4K(或指定容量限制)时,自动生成下一个存储单元(不超出存储单元限额的话,否则出警告)
5.每次读取指定主次名的cookie时,首先遍历所有dataCell,unescape每个dataCell里的值,从这个值里查找与指定主名匹配的项目,取出(名称=值)对
6.每次存储指定主次名的cookie时,首先遍历所有dataCell,unescape每个dataCell里的值,从这个值里查找与指定主名匹配的项目,如果有匹配主名,取出(名称=值)对,接着改写其内容;如果不匹配主名,则向最靠后一个存储单元写入该主、次名值
CookieSet存储结构如下(以下用escape()代替真正编码后的内容,以免解读困难,帮助理解)
dataCell0 escape(aaa=1;bbb=2;ccc=3; .............)
dataCell2 escape(ddd=1;eee1=1;eee2=3; ........)
7.大小写敏感
8.如果在存储单元空间内已经有同名值,但是修改后的值将使该空间超出容量限制,则查找剩余空间足够的单元:如果有,则将该值存储在该单元内,并且从原空间删除;如果没有足够空间的单元,则不做处理,抛出错误警告
*******************************************************/
function CookieSet(len,size,dataCellName){
this.defaultMaxLength=20;
this.defaultMaxSize=4000;
this.defaultDataCellName="dataCell";
this.maxLength=len==null?this.defaultMaxLength:len;
this.maxSize=size==null?this.defaultMaxSize:size;
this.dataCellName=dataCellName==null?this.defaultDataCellName:dataCellName;
function SetCookie (name, value) {
var exp = new Date();
exp.setTime(exp.getTime() + (12*30*24*60*60*1000));
window.document.cookie = name + "=" + escape (value) + "; expires=" + exp.toGMTString()+";path="+__path;
}
function GetCookie (name) {
var arg = name + "=";
var alen = arg.length;
var clen = window.document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (window.document.cookie.substring(i, j) == arg) return getCookieVal (j);
i = window.document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
function getCookieVal (offset) {
var endstr = window.document.cookie.indexOf (";", offset);
if (endstr == -1) endstr = window.document.cookie.length;
return unescape(window.document.cookie.substring(offset, endstr));
}
function DeleteCookie (name) {
var exp = new Date();
exp.setTime (exp.getTime() - 1);
var cval = GetCookie (name);
window.document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString()+";";
}
this.getValue=function(name){
for(var i=0;iminSize){
return i;
}else if(_currentDataCell!=null && this.maxSize-escape(_currentDataCell).length>=minSize){
return i;
}
}
//如果未没有找到可用空间
alert("存储空间不足");
return null;
}
}