作者:wangxuan1992_273_361 | 来源:互联网 | 2020-08-19 09:53
实际上,更新cookie与替换cookie略有不同,因为我们想在cookie中放入的新值在某种程度上取决于cookie是否已经存在,如果存在,则取决于它包含什么。这意味着我们需要先读取现有的cookie,然后才能为其编写替换。
实际上,更新COOKIE与替换COOKIE略有不同,因为我们想在COOKIE中放入的新值在某种程度上取决于COOKIE是否已经存在,如果存在,则取决于它包含什么。这意味着我们需要先读取现有的COOKIE,然后才能为其编写替换。
需要注意的一点是,当我们读取COOKIE时,我们无法知道现有COOKIE何时到期,或者COOKIE是限制在特定文件夹中还是在整个域中可用。你需要在更换COOKIE时设置新的保留期,并且需要跟踪COOKIE在页面中的范围,以便每次都应用相同的域或路径选项。你在更新而不是替换COOKIE时,实际上能够读取的唯一内容是存储在COOKIE中的数据的实际值。
在本例中,我们将使用一个名为“accesscount”的COOKIE来计算访问者访问页面的次数,其中每次访问间隔不超过7天。如果两次访问间隔超过7天,那么COOKIE将过期,下一次访问将从0开始重新计数。我们使用了前面示例中的allCOOKIEs()和writeCOOKIE()函数,因此为了实际执行更新,我们只需要最后两行代码。
代码示例如下:
var COOKIE;
allCOOKIEs = function() {
var cr, ck, cv;
cr = []; if (document.COOKIE != '') {
ck = document.COOKIE.split('; ');
for (var i=ck.length - 1; i>= 0; i--) {
cv = ck.split('=');
cr[ck[0]]=ck[1];
}
}
return cr;
};
writeCOOKIE = function(cname, cvalue, days,opt) {
var dt, expires, option;
if (days) {
dt = new Date();
dt.setTime(dt.getTime()+(days*24*60*60*1000));
expires = "; expires="+dt.toGMTString();
} else expires = '';
if (opt) {
if ('/' = substr(opt,0,1)) option = "; path="+opt;
else option = "; domain="+opt;
} else option = '';
document.COOKIE = cname+"="+cvalue+expires+option;
}
COOKIE = allCOOKIEs();
if (COOKIE.accesscount != null) writeCOOKIE('myCOOKIE', COOKIE.accesscount + 1,7);
else writeCOOKIE('myCOOKIE', 1,7);