2011-09-20 30 views

Trả lời

17

Chỉ cần chỉ định cùng một đường dẫn của cookie mà bạn muốn xóa, cho nó hết hạn trong quá khứ.

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 

Thay đổi nó hết hạn cookie với một con đường / sẽ vẫn chỉ hết hạn một trong những cookie - con đường cho có để phù hợp với con đường thiết lập:

document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString(); 

alert(document.cookie); // name=value2 

Để loại bỏ cả hai, bạn sẽ phải hết hạn mỗi đường dẫn của mình:

document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString(); 
document.cookie = 'name=; path=/path/; expires=' + new Date(0).toUTCString(); 

alert(document.cookie); // {blank} 

Bây giờ, các ví dụ này giả sử bạn đang duyệt /path/ hoặc thư mục con của nó.


[sửa]

Để loại bỏ với số lượng lớn, hãy thử một cái gì đó như thế này:

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/']); 

Demo: http://jsfiddle.net/M2dZ3/

Bạn cũng có thể giả tra cứu đường đi bằng cách tách và lặp 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); 
} 

Bản trình diễn: http://jsfiddle.net/M2dZ3/2/

+0

Vì vậy, nếu đường dẫn có khả năng chứa 6 giá trị khác nhau, tôi nên sử dụng document.cookie 6x với đúng đường dẫn? – JKown

+0

@JKown Về cơ bản. Mặc dù, tôi sẽ đề nghị lặp qua các đường dẫn để bạn chỉ có 1 câu lệnh 'document.cookie'. Xem chỉnh sửa của tôi cho một tùy chọn. –

+0

Cảm ơn, điều đó phù hợp với tôi. – JKown

0

Bạn có thể đặt một cookie với các thông số tương tự nhưng một ngày trong quá khứ:

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

Xem một số thông tin có giá trị on quirksmode

[EDIT] Để xóa các cookie có cùng tên, bạn có thể thử:

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

Điều đó cũng sẽ xóa cookie không có Đường dẫn "/" phải không? – JKown

+0

có nghĩa là bạn muốn xóa tất cả cookie có cùng tên, hãy thử mã từ câu trả lời đã chỉnh sửa của tôi – JMax

+0

Mối quan tâm là nó sẽ xóa quá nhiều cookie. Nhưng, hết hạn với 'path = /' nên để những người khác bị ảnh hưởng. –

Các vấn đề liên quan