Bagaimana cara menghapus cookie?

338

Apakah fungsi saya membuat cookie benar? Bagaimana cara saya menghapus cookie di awal program saya? apakah ada kode sederhana?

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);
}
kennedy
sumber
1
w3schools memiliki fungsi yang baik untuk cookie di w3schools.com/js/js_cookies.asp . Anda dapat menggunakan setCookie('name', 'value', 0)untuk menghapus cookie.
Pete

Jawaban:

341

Coba ini:

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";
  }
}

Atau:

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

Anda dapat mendefinisikan get_cookie()seperti ini:

function get_cookie(name){
    return document.cookie.split(';').some(c => {
        return c.trim().startsWith(name + '=');
    });
}
ACP
sumber
2
bagaimana cara saya mengatur fungsi itu dan memeriksa apa cookie saya dan apakah sudah kedaluwarsa?
kennedy
61
get_cookie tidak didefinisikan
Kreker
9
Versi kedua dari fungsi tidak lagi berfungsi Lihat jsfiddle jsfiddle.net/b27Lgxgf/1 . Pendekatan dalam karya
Tasos K.
6
Bagaimana cara kerjanya? JavaScript tidak memiliki get_cookie()fungsi bawaan.
Michał Perłakowski
4
@ MichałPerłakowski Saya cukup yakin itu hanya dimaksudkan untuk menjadi pengganti / fungsi aktual yang akan Anda tetapkan di tempat lain.
JSeligsohn
114

Di sini tautan yang bagus di 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;';  
}
Luca Matteis
sumber
20
catatan: toGMTString telah ditinggalkan demitoUTCString
drzaus
4
Catatan: jika tidak berfungsi, pastikan pathsudah benar. lihat: developers.google.com/web/tools/chrome-devtools/manage-data/…
Gayan Weerakutti
domain harus ditambahkan.
Michael Kapustey
3
Juga perlu dicatat bahwa jalur dan domain harus memiliki nilai yang benar.
Esko
Diuji, berfungsi dengan baik bahkan di WKWebView, sebelum halaman dimuat. Pekerjaan bagus untuk solusi.
PashaN
32

apakah ini akan berhasil?

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

Saya tahu Max-Agemenyebabkan cookie menjadi cookie sesi di IE saat membuat cookie. Tidak yakin cara kerjanya saat menghapus cookie.

Collin Anderson
sumber
Setel ke nol, cookie akan kedaluwarsa ketika jendela browser ditutup.
AyexeM
17

Berikut ini adalah implementasi dari fungsi hapus cookie dengan dukungan unicode dari 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");

Jika Anda menggunakan AngularJs, coba $ cookies.remove (di bawahnya menggunakan pendekatan serupa ):

$cookies.remove('cookieName');
Vitalii Fedorenko
sumber
17

Anda dapat melakukan ini dengan menetapkan tanggal kedaluwarsa ke kemarin.

Mengaturnya ke "-1" tidak berfungsi. Itu menandai cookie sebagai Sessioncookie.

Markus Nordhaus
sumber
contoh Anda tidak berfungsi jika Anda menetapkan cookie di halaman lain dan mencoba menghapusnya dari halaman lain. set berfungsi, tetapi tidak bisa menghapusnya.
chovy
2
Saya akhirnya menggunakan ini: github.com/carhartl/jquery-cookie Dan Anda harus menghapus menggunakan path: '/'
chovy
Ini adalah pendekatan yang baik kecuali ... hanya mengatur waktu kedaluwarsa ke nol. Itu akan menyebabkan kedaluwarsa instan, dan tidak membingungkan siapa pun ("Mengapa pengembang menetapkan waktu kedaluwarsa untuk kemarin? Apakah itu suatu kesalahan, apakah mereka menginginkan masa pakai satu hari?"). Tulis kode sehingga lebih masuk akal, dan hidup Anda akan kurang membingungkan. Ini adalah filosofi undervalued dalam pengkodean saat ini ... Bahkan MDN menyarankan pengaturan waktu kedaluwarsa ke nol untuk menghapus cookie.
dudewad
10

Untuk menghapus cookie saya atur lagi dengan nilai kosong dan kedaluwarsa dalam 1 detik. Secara detail, saya selalu menggunakan salah satu citarasa berikut (saya cenderung lebih suka yang kedua):

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);
    }

Pemakaian:

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});
    }

Pemakaian:

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

Beberapa solusi lain mungkin tidak berfungsi jika Anda membuat cookie secara manual.

Berikut cara cepat untuk menghapus cookie:

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

Saya mengalami masalah menghapus cookie yang dibuat melalui JavaScript dan setelah saya menambahkan host itu berfungsi (gulir kode di bawah ini ke kanan untuk melihat location.host). Setelah menghapus cookie pada domain, coba yang berikut ini untuk melihat hasilnya:

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);}
 }
}
John
sumber