删除具有相同名称但不同路径的cookie

Removing cookies with the same name but different paths

本文关键字:路径 cookie 删除      更新时间:2023-09-26

我需要删除具有相同名称但具有不同路径的客户端cookie。在javascript中,最好的方法是什么?

只需指定要删除的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/']);

演示:http://jsfiddle.net/M2dZ3/

您也可以通过拆分和迭代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);
}

演示:http://jsfiddle.net/M2dZ3/2/