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

时间:2011-09-20 14:51:12

标签: javascript cookies path client-side

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

2 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:1)

您可以使用相同的参数设置Cookie,但过去的日期为:

document.cookie =
  'ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'

查看一些有价值的信息on quirksmode

[编辑]要删除具有相同名称的cookie,您可以尝试:

function delete_cookie ( cookie_name )
{
  var cookie_date = new Date ( );  // current date & time
  cookie_date.setTime ( cookie_date.getTime() - 1 );
  document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}

Source