2011-09-20 186 views

回答

17

只需指定要删除的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的/路径将仍然只有过期饼干之一 - 定的路径必须匹配的路径设置:

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/

+0

所以如果路径可能包含6个不同的值,我应该使用6x document.cookie的正确路径? – JKown

+0

@JKown本质上。虽然,我会建议循环路径,所以你只有1个'document.cookie'语句。看到我的编辑为一个选项。 –

+0

谢谢,这对我很有用。 – JKown

0

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

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

看到一些有价值的信息​​

[编辑]删除具有相同名称的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

+0

这也会删除没有路径“/”的Cookie吗? – JKown

+0

您的意思是您想要删除所有具有相同名称的Cookie,请尝试从我编辑的答案中输入代码 – JMax

+0

问题在于它会删除太多的Cookie。但是,用'path = /'过期应该保持其他人不变。 –

相关问题