Tôi cần xóa cookie của khách hàng có cùng tên nhưng với các đường dẫn khác nhau. Cách tốt nhất để làm điều này trong javascript là gì.Xóa cookie có cùng tên nhưng các đường dẫn khác nhau
Trả lời
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/
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();
}
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
@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. –
Cảm ơn, điều đó phù hợp với tôi. – JKown