Làm thế nào để xóa một cookie?


338

Chức năng tạo cookie của tôi có đúng không? Làm cách nào để xóa cookie khi bắt đầu chương trình? Có một mã hóa đơn giản?

function createCookie(name,value,days)
function setCookie(c_name,value,1) {
  document.cookie = c_name + "=" +escape(value);
}

setCookie('cookie_name',mac);

function eraseCookie(c_name) {
  createCookie(cookie_name,"",-1);
}

1
w3schools có các chức năng tốt cho cookie tại w3schools.com/js/js_cookies.asp . Bạn có thể sử dụng setCookie('name', 'value', 0)để xóa cookie.
Pete

Câu trả lời:


341

Thử cái này:

function delete_cookie( name, path, domain ) {
  if( get_cookie( name ) ) {
    document.cookie = name + "=" +
      ((path) ? ";path="+path:"")+
      ((domain)?";domain="+domain:"") +
      ";expires=Thu, 01 Jan 1970 00:00:01 GMT";
  }
}

Hoặc là:

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

Bạn có thể định nghĩa get_cookie()như thế này:

function get_cookie(name){
    return document.cookie.split(';').some(c => {
        return c.trim().startsWith(name + '=');
    });
}

2
Làm cách nào để thiết lập chức năng và kiểm tra cookie của tôi là gì và liệu nó đã hết hạn chưa?
kennedy

61
get_cookie không được xác định
Kreker

9
Phiên bản thứ hai của chức năng không còn hoạt động Xem jsfiddle jsfiddle.net/b27Lgxgf/1 . Cách tiếp cận trong công việc anwser của @Luca
Tasos K.

6
Công việc này dự định làm như thế nào nhỉ? JavaScript không có get_cookie()chức năng tích hợp.
Michał Perłakowski

4
@ MichałPerłakowski Tôi khá chắc chắn rằng nó chỉ có nghĩa là giữ chỗ / tham chiếu đến một chức năng thực tế mà bạn sẽ xác định ở nơi khác.
JSeligsohn

113

Đây là một liên kết tốt trên Quirksmode .

function setCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
}
function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}
function eraseCookie(name) {   
    document.cookie = name+'=; Max-Age=-99999999;';  
}


4
lưu ý: trong trường hợp không hoạt động, đảm bảo pathlà chính xác. xem: developers.google.com/web/tools/chrome-devtools/manage-data/...
Gayan Weerakutti

tên miền nên được thêm vào.
Michael Kapustey

3
Cũng đáng lưu ý rằng cả đường dẫn miền cần phải có giá trị chính xác.
Esko

Đã thử nghiệm, hoạt động hoàn hảo ngay cả trong WKWebView, trước khi tải trang. Làm tốt về giải pháp.
PashaN

31

cái này có hoạt động không?

function eraseCookie(name) {
    document.cookie = name + '=; Max-Age=0'
}

Tôi biết Max-Agenguyên nhân cookie là cookie phiên trong IE khi tạo cookie. Không chắc chắn làm thế nào nó hoạt động khi xóa cookie.


17

Bạn có thể làm điều này bằng cách đặt ngày hết hạn vào ngày hôm qua.

Đặt nó thành "-1" không hoạt động. Điều đó đánh dấu một cookie là một phiên bản.


ví dụ của bạn không hoạt động nếu bạn đặt cookie trên một trang khác và cố gắng xóa nó khỏi một trang khác. bộ hoạt động, nhưng không thể xóa nó.
chovy

2
Tôi đã kết thúc bằng cách sử dụng này: github.com/carhartl/jquery-cookie Và bạn phải xóa bằng đường dẫn: '/'
chovy

Đây là một cách tiếp cận tốt, ngoại trừ ... chỉ cần đặt thời gian hết hạn về không. Điều đó sẽ gây ra hết hạn ngay lập tức và không gây nhầm lẫn cho bất kỳ ai ("Tại sao nhà phát triển đặt thời gian hết hạn cho ngày hôm qua? Đó có phải là một sai lầm, họ có muốn một vòng đời một ngày không?"). Viết mã để nó có ý nghĩa hơn, và cuộc sống của bạn sẽ bớt khó hiểu hơn. Đây là một triết lý được đánh giá thấp trong mã hóa hiện nay ... Ngay cả MDN cũng đề nghị đặt thời gian hết hạn về 0 để xóa cookie.
dudewad

16

Đây là một triển khai chức năng xóa cookie với sự hỗ trợ unicode từ Mozilla:

function removeItem(sKey, sPath, sDomain) {
    document.cookie = encodeURIComponent(sKey) + 
                  "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + 
                  (sDomain ? "; domain=" + sDomain : "") + 
                  (sPath ? "; path=" + sPath : "");
}

removeItem("cookieName");

Nếu bạn sử dụng AngularJs, hãy thử $ cookies.remove (bên dưới nó sử dụng một cách tiếp cận tương tự ):

$cookies.remove('cookieName');

10

Để xóa cookie, tôi đặt lại một lần nữa với giá trị trống và hết hạn sau 1 giây. Cụ thể, tôi luôn sử dụng một trong những hương vị sau (tôi có xu hướng thích loại thứ hai):

1.

    function setCookie(key, value, expireDays, expireHours, expireMinutes, expireSeconds) {
        var expireDate = new Date();
        if (expireDays) {
            expireDate.setDate(expireDate.getDate() + expireDays);
        }
        if (expireHours) {
            expireDate.setHours(expireDate.getHours() + expireHours);
        }
        if (expireMinutes) {
            expireDate.setMinutes(expireDate.getMinutes() + expireMinutes);
        }
        if (expireSeconds) {
            expireDate.setSeconds(expireDate.getSeconds() + expireSeconds);
        }
        document.cookie = key +"="+ escape(value) +
            ";domain="+ window.location.hostname +
            ";path=/"+
            ";expires="+expireDate.toUTCString();
    }

    function deleteCookie(name) {
        setCookie(name, "", null , null , null, 1);
    }

Sử dụng:

setCookie("reminder", "buyCoffee", null, null, 20);
deleteCookie("reminder");

2

    function setCookie(params) {
        var name            = params.name,
            value           = params.value,
            expireDays      = params.days,
            expireHours     = params.hours,
            expireMinutes   = params.minutes,
            expireSeconds   = params.seconds;

        var expireDate = new Date();
        if (expireDays) {
            expireDate.setDate(expireDate.getDate() + expireDays);
        }
        if (expireHours) {
            expireDate.setHours(expireDate.getHours() + expireHours);
        }
        if (expireMinutes) {
            expireDate.setMinutes(expireDate.getMinutes() + expireMinutes);
        }
        if (expireSeconds) {
            expireDate.setSeconds(expireDate.getSeconds() + expireSeconds);
        }

        document.cookie = name +"="+ escape(value) +
            ";domain="+ window.location.hostname +
            ";path=/"+
            ";expires="+expireDate.toUTCString();
    }

    function deleteCookie(name) {
        setCookie({name: name, value: "", seconds: 1});
    }

Sử dụng:

setCookie({name: "reminder", value: "buyCoffee", minutes: 20});
deleteCookie("reminder");

8

Một số giải pháp khác có thể không hoạt động nếu bạn tạo cookie theo cách thủ công.

Đây là một cách nhanh chóng để xóa cookie:

document.cookie = 'COOKIE_NAME=; Max-Age=0; path=/; domain=' + location.host;

6

Tôi gặp sự cố khi xóa cookie được tạo qua JavaScript và sau khi tôi thêm máy chủ lưu trữ, nó đã hoạt động (cuộn mã bên dưới sang bên phải để xem location.host). Sau khi xóa cookie trên một tên miền, hãy thử làm như sau để xem kết quả:

if (document.cookie.length==0)
{
 document.cookie = 'name=example; expires='+new Date((new Date()).valueOf()+1000*60*60*24*15)+'; path=/; domain='+location.host;

 if (document.cookie.length==0) {alert('Cookies disabled');}
 else
 {
  document.cookie = 'name=example; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain='+location.host;

  if (document.cookie.length==0) {alert('Created AND deleted cookie successfully.');}
  else {alert('document.cookies.length = '+document.cookies.length);}
 }
}
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.