Xóa cookie theo tên?


151

Làm thế nào tôi có thể xóa một cookie cụ thể với tên roundcube_sessauth?

Không nên như sau:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

Và sau đó:

<a href="javascript:del_cookie(name);">KILL</a>

Giết roundcube_sessauthcookie?


1
name? Điểm của điều đó là gì? Hoặc nó là một hangover từ một phiên bản linh hoạt hơn cho phép bạn chỉ định tên cookie?
paxdiablo

Đừng nghĩ đó là một bản dupe. Nó đặc biệt hỏi về việc xóa tất cả các cookie.
paxdiablo

1
Tôi không muốn xóa tất cả cookie ... Chỉ một cái. Tôi tìm thấy mã cơ bản từ googling xung quanh. Và tất nhiên tôi đã thử nó. @Paxdiablo Tôi giả sử nó để đặt tên cho cookie, nhưng tôi có thể sai hoàn toàn.
Charlie

@paxdiablo - ...How can I delete a specific cookie
Derek 朕 會

1
@Derek et al, bạn có vẻ hiểu lầm. Tôi đã tuyên bố rằng bản dupe được đề xuất từ ​​Gabe hoàn toàn không phải là bản dupe vì bản dupe được đề xuất đã hỏi về việc xóa tất cả các cookie và câu hỏi này hỏi về việc xóa một cookie cụ thể . Tôi đã không phàn nàn về câu hỏi này dưới bất kỳ hình thức, hình dạng hoặc hình thức nào :-)
paxdiablo

Câu trả lời:


252

Bạn nên xác định đường dẫn mà cookie tồn tại để đảm bảo rằng bạn đang xóa đúng cookie.

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Nếu bạn không chỉ định đường dẫn, trình duyệt sẽ đặt cookie liên quan đến trang bạn hiện đang truy cập, vì vậy nếu bạn xóa cookie trong khi ở một trang khác, cookie khác sẽ tiếp tục tồn tại.

Chỉnh sửa dựa trên nhận xét của @Evan Morrison.
Xin lưu ý rằng trong một số trường hợp để xác định cookie chính xác, Domaintham số là bắt buộc.
Thông thường nó được định nghĩa là Domain=.yourdomain.com.
Đặt một dấu chấm trước tên miền của bạn có nghĩa là cookie này có thể tồn tại trên bất kỳ tên miền phụ nào ( wwwcũng được tính là tên miền phụ).

Ngoài ra, như được đề cập trong câu trả lời của @ RobertT, HttpOnlycookie không thể bị xóa bằng JavaScript ở phía máy khách.


23
Điều này đã khiến tôi phát điên! Sau khi tôi thêm Path = /, tôi đã có thể xóa. Cảm ơn!
duyn9uyen

12
Đây phải là câu trả lời chính xác, nó không hoạt động mà không có Pathtrong hầu hết các trường hợp.
SuperMarco

9
Tôi đã không thể xóa cookie cho đến khi tôi thêm cả đường dẫn và đúng 'Domain = value; '... Vì vậy, tuyên bố của tôi là: document.cookie = "cookieName =; path = /; expires = Thu, 01 tháng 1 năm 1970 00:00:01 GMT; domain = .myDomain.com"
Evan Morrison

1
Giải pháp này vẫn hoạt động, nhưng có thể được viết ngắn gọn hơn một chút Max-Age=0, nếu bạn quan tâm đến những điều đó.
MaxPRafferty

181

Để xóa cookie, đặt expiresngày thành một cái gì đó trong quá khứ. Một chức năng làm điều này sẽ được.

var delete_cookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
};

Sau đó, để xóa một cookie có tên roundcube_sessauthchỉ cần làm.

delete_cookie('roundcube_sessauth');

1
Tôi cảm thấy như thế này sẽ hoạt động (có vẻ như nó sẽ hoạt động: D!), Nhưng tôi đang xem các cookie được đặt bởi trang của tôi trong firefox và khi tôi nhấp vào nút "KILL", cookie sẽ không bị xóa. Bất cứ ý tưởng tại sao?
Charlie

Điều này hoạt động trong Google Chrome. Cài đặt fireorms và xem nếu có bất kỳ lỗi.

1
Không có lỗi, tôi đoán nó chỉ không xóa cookie trong Roundcube. Nó có thể xóa các cookie khác tốt.
Charlie

39
Đối với người dùng đang tìm kiếm một câu trả lời cho câu hỏi này, xin vui lòng xem câu trả lời dưới đây. Các path=/Điều quan trọng là quan trọng đối với khả năng tương thích trình duyệt.
bencripps

2
Câu trả lời này không hiệu quả với tôi trên Chrome, chưa thử nó trong Firefox. Nhưng câu trả lời của emii dưới đây đã làm việc.
Daniel F

11

// nếu đã qua exMins = 0, nó sẽ xóa ngay khi tạo.

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.

exMins không được xác định trong ví dụ này, bạn có thể có nghĩa là exday
bhurlow

Vâng .. thay vì đổi tên đối số ngày hôm nay thành exMins .. cảm ơn #BhBh
Kishor Patil

7

Tôi không thực sự chắc chắn nếu đó là tình huống với phiên bản Roundcube từ tháng 12 năm 12, nhưng đối với câu hỏi hiện tại, câu trả lời là bạn không thể xóa roundcube_sessauthcookie khỏi JavaScript, vì nó được đánh dấu là HttpOnly. Và điều này có nghĩa là nó không thể truy cập được từ mã phía máy khách JS và chỉ có thể được xóa bằng tập lệnh phía máy chủ hoặc bằng hành động trực tiếp của người dùng (thông qua một số cơ chế trình duyệt như trình gỡ lỗi tích hợp hoặc một số plugin).


1

Bạn có thể thử giải pháp này

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;

0

Trong trường hợp của tôi, tôi đã sử dụng mã thổi cho môi trường khác nhau.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.