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

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 + '=');
    });
}

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

20

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.


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

17

Anda dapat melakukan ini dengan menetapkan tanggal kedaluwarsa ke kemarin.

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


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

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;

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);}
 }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.