删除同名但路径不同的cookies

Posted

技术标签:

【中文标题】删除同名但路径不同的cookies【英文标题】:Removing cookies with the same name but different paths 【发布时间】:2011-11-21 04:19:39 【问题描述】:

我需要删除同名但路径不同的客户端 cookie。在 javascript 中执行此操作的最佳方法是什么。

【问题讨论】:

【参考方案1】:

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

【讨论】:

所以如果路径可能包含 6 个不同的值,我应该使用 6x document.cookie 和正确的路径? @JKown 本质上。不过,我建议循环遍历路径,这样您就只有 1 个 document.cookie 语句。请参阅我的编辑以获取一个选项。 一个后续问题。是否可以用 cookie 中的路径“输入”路径数组?如;我可以从 cookie 中获取路径吗? @JKown 不像document.cookie 只返回名称和值。但是,由于 cookie 仅在其路径与当前路径相关时才可用,因此您可以通过拆分和迭代 window.location.pathname 来伪造它。查看我的最新编辑。 在某些浏览器中,必须指定不带斜杠的路径。

以上是关于删除同名但路径不同的cookies的主要内容,如果未能解决你的问题,请参考以下文章

当我们有多个同名但属性不同的元素时,如何使用 Xdocument 从 xml 中删除一个元素

求助一个python脚本用于批删除同文件夹下的同名不同后缀的文件

使用bash将文件从已删除文件夹移动到其原始路径应检查原始路径中是不是存在同名文件[重复]

python去除rpm仓库中同名低版本的包

删除一个asp.net mvc4.5的项目,然后新建一个同名的项目,运行的时候会跳转到一个乱七八糟的路径。

路由到同名但参数不同的动作