【发布时间】:2011-11-21 04:19:39
【问题描述】:
我需要删除同名但路径不同的客户端 cookie。在 javascript 中执行此操作的最佳方法是什么。
【问题讨论】:
标签: javascript cookies path client-side
我需要删除同名但路径不同的客户端 cookie。在 javascript 中执行此操作的最佳方法是什么。
【问题讨论】:
标签: javascript cookies path client-side
只需指定要删除的 cookie 的相同路径,使其过期。
document.cookie = 'name=value1; path=/';
document.cookie = 'name=value2; path=/path/';
alert(document.cookie); // name=value1; name=value2
document.cookie = 'name=; path=/path/; expires=' + new Date(0).toUTCString();
alert(document.cookie); // name=value1
将其更改为使路径为 / 的 cookie 过期仍然只会使其中一个 cookie 过期 -- 给定的路径必须与路径集匹配:
document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString();
alert(document.cookie); // name=value2
要删除两者,您必须使用它们的路径使每个都过期:
document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString();
document.cookie = 'name=; path=/path/; expires=' + new Date(0).toUTCString();
alert(document.cookie); // {blank}
现在,这些示例假设您正在浏览 /path/ 或其子目录。
[编辑]
要批量删除,请尝试以下操作:
function expireAllCookies(name, paths) {
var expires = new Date(0).toUTCString();
// expire null-path cookies as well
document.cookie = name + '=; expires=' + expires;
for (var i = 0, l = paths.length; i < l; i++) {
document.cookie = name + '=; path=' + paths[i] + '; expires=' + expires;
}
}
expireAllCookies('name', ['/', '/path/']);
您还可以通过拆分和迭代window.location.pathname 来伪造路径查找:
function expireActiveCookies(name) {
var pathname = location.pathname.replace(/\/$/, ''),
segments = pathname.split('/'),
paths = [];
for (var i = 0, l = segments.length, path; i < l; i++) {
path = segments.slice(0, i + 1).join('/');
paths.push(path); // as file
paths.push(path + '/'); // as directory
}
expireAllCookies(name, paths);
}
【讨论】:
document.cookie 语句。请参阅我的编辑以获取一个选项。
document.cookie 只返回名称和值。但是,由于 cookie 仅在其路径与当前路径相关时才可用,因此您可以通过拆分和迭代 window.location.pathname 来伪造它。查看我的最新编辑。