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

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

【问题讨论】:

    标签: javascript cookies path client-side


    【解决方案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 来伪造它。查看我的最新编辑。
    • 在某些浏览器中,必须指定不带斜杠的路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2014-06-25
    • 2022-01-16
    • 2021-08-09
    • 2017-08-12
    • 2022-01-21
    相关资源
    最近更新 更多