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

Javascript 删除具有相同名称但不同路径的Cookie,javascript,cookies,path,client-side,Javascript,Cookies,Path,Client Side,我需要删除同名但路径不同的客户端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=/pa

我需要删除同名但路径不同的客户端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/']);

演示:

因此,如果路径可能包含6个不同的值,我应该使用6x document.cookie和正确的路径?@JKown。不过,我建议在路径上循环,这样您只有1个
document.cookie
语句。请参阅我的编辑以获得一个选项。一个后续问题。是否可以用cookie中的路径“馈送”路径数组?例如:;我可以从cookie中获取路径吗?@JKown不是真正的
文档。cookie
只返回名称和值。但是,由于Cookie仅在其路径与当前路径相关时可用,您可以通过拆分和迭代
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);
}