//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; } }