想要改变一个 cookie 值,只需要使用相同的名称和新值重新设置该 cookie 值即可。
Cookie 除了可以在浏览器中存储信息之外,还可以使用代码进行删除。可以根据 Cookie 的名称删除指定的 Cookie ,例如。
function deleteCookie(name) {
var date = new Date();
date.setTime(date.getTime() - 10000);
// 删除一个 Cookie ,就是将其过期时间设定为一个过去的时间
document.cookie = name + '= 删除' + 'expires=' + date.toGMTString();
}
首先使用自定义 setCookie 函数创建一个 Cookie ,使用 alert 语句将 Cookie 值弹出,然后调用 deleteCookie 函数删除指定的 Cookie 值。其实,删除 Cookie 操作实际上就是将 Cookie 的 expires 属性重新设置一个时间,该时间为当前时间的过去时间。这样再次使用 alert 语句将 Cookie 值弹出时,对话框中的值将为空值。
function deleteCookie(name, path, domain) {
if (getCookie(name))
document.cookie =
name +
'=' +
/** 如果存在 , 则清空 */
(path ? '?path=' + path : '') +
/** 如果存在路径,则加上 */
(domain ? ';domain=' + domain : '') +
/** 如果存在域,则加上*/
';expires=Thu,01-Jan-1970 00: 00:01 GMT';
}
浏览器对 cookie 信息都有个数限制,为了避免超出限制,可以把多条信息都保存在一个 cookie 中,而不是为每条信息都建议一个 cookie 。由于 cookie 可储存的字符串最大长度为 4KB (即 4096 个字符),在实际应用中,这个字符串长度完全满足各种用户信息的储存。
实现方法:在每一个名值对,再嵌套一组名 / 值对。子名 / 值对之间的分隔符,约定类于对象直接量。
subName1:subValue1,subName2:subValue2,subName3:subValue3
然后把组名 / 值对作为值传递给 cookie 的名称。
name=subName1:subValue1,subName2:subValue2,subName3:subValue3
为了确保名 / 值对不引起歧义,建议使用 escape() 方法对其进行编码,读取时再使用 unescape() 方法转码即可。
var d = new Date();
d.setMonth(d.getMonth() + 1);
/** 子 / 名值串 */
d = d.toGMString();
/** 组合 cookie 字符串 */
var a = 'name:a,age:20,addr:beijing';
/** 设置有效期为 1 个月 document.cookie = c; */
var c = 'user=' + escape(a);
/** 写入 cookie 信息 */
c += '' + 'expires' + d;
当读取 cookie 信息时,首先需要获取 cookie 值,然后调用 unescape() 方法对 cookie 值进行解码,最后访问再访问每一个 cookie 值
function getSubCookie() {
var a = document.cookie.split('');
var o = {};
for (var i = 0; i < a.length; i++) {
// 遍历数组信息
a[i] && (a[i] = a[i].replace(/^\s+|\s+$/, ''));
var b = a[i].split('=');
var c = b[1];
c &&
((c =
/** 清空 */
c.replace(/^\s+|\s+$/)),
'');
c = unescape(c);
/** 解码 */
if (!/\,/gi.test(c)) {
/** 若无则写 */
o[b[0]] = b[1];
} else {
var d = c.split(',');
/** 劈开 cookie 值 */
/** 遍历 cookie 数组 */
for (var j = 0; j < d.length; j++) {
/** 劈开名 / 值对 */
var e = d[j].split(':');
/** 写入 cookie */
[e[0]] = e[1];
}
}
}
/** 返回 cookie */
return o;
}
有个别浏览器不支持 cookie 或者被禁用,在使用前可以先判断;
if (navigator.cookieEnabled) {
setCookie();
/** or */
getCookie();
}