您的代码似乎工作正常,但我想我会发布一些我编写的通过 JavaScript 处理 cookie 的代码,让您对可以做什么有更多的想法。我基于此处的 MDN 示例,但具有我想要的功能(对象查找、缓存直到更改)。随意为您的项目提取代码片段(或全部使用)。
cookie.setItem('number', 1, 10 * 24 * 60 * 60); // expires is Number => seconds
cookie.getItem('number'); // "1"
函数 cookie
使字符串正确格式化以供使用document.cookie
,它需要参数key、val、expires、path、domain、secure。参数expires可以是Number(从现在开始的秒数或Infinity)、Date或String。
函数 cookie.setItem
具有相同的参数,cookie
但也应用它。如果只给出一个键,则假定它是一个完整的 cookie 格式的String。
函数 cookie.getItem
只需要一个参数key。
函数 cookie.removeItem
有参数key, path。你只需要使用key。
var cookie = (function () {
var cookieString = '',
items = {},
expireNever = new Date(new Date().valueOf() + 64e10).toGMTString(), // 20 years
expireNow = 'Thu, 01 Jan 1970 00:00:00 GMT',
cookie,
__update,
supportsMaxAge = 1;
__update = function () {
var a, i, j, o = {};
cookieString = document.cookie;
a = cookieString.split('; ');
i = a.length;
while (i--) {
j = a[i].indexOf('=');
o[decodeURIComponent(a[i].slice(0, j))]
= decodeURIComponent(a[i].slice(j + 1));
}
items = o;
}
cookie = function cookie(key, val, expires, path, domain, secure) {
var s = encodeURIComponent(''+key) + '='
+ encodeURIComponent(''+val);
if (!key) return '';
if (expires || expires === 0) {
switch (expires.constructor) {
case Number:
if (expires === Infinity) expires = 'expires=' + expireNever;
else {
if (supportsMaxAge) expires = 'max-age=' + expires;
else expires = 'expires=' + new Date(new Date().valueOf() + expires * 1000).toGMTString();
}
break;
case Date:
expires = 'expires=' + expires.toGMTString();
break;
default:
case String:
expires = 'expires=' + expires;
break;
}
s = s + '; ' + expires;
}
if (domain) s = s + '; domain=' + domain;
if (path) s = s + '; path=' + path;
if (secure) s = s + '; secure';
return s;
};
cookie.getNames = function () {
if (document.cookie !== cookieString) __update();
return Object.keys(items);
};
cookie.getItem = function (key) {
var s;
if (document.cookie !== cookieString) __update();
s = items[key];
if (s || s === '') return s;
return null;
};
cookie.setItem = function (key, val, expires, path, domain, secure) {
var s;
if (!key) return null;
if (val === void 0) s = key;
else s = cookie(key, val, expires, path, domain, secure);
document.cookie = s;
return s;
};
cookie.hasItem = function (key) {
if (cookie.getItem(key) === null) return false;
return true;
};
cookie.removeItem = function (key, path) {
if (cookie.setItem(key, '', expireNow, path)) return true;
return false;
};
// find out if max-age is supported
cookie.setItem('test_cookie_max_age', '1', 0);
if (cookie.getItem('test_cookie_max_age')) {
supportsMaxAge = 0;
cookie.removeItem('test_cookie_max_age');
}
__update();
return cookie;
}());