Bir çerez nasıl silinir?


338

Çerez oluşturma işlevim doğru mu? Programımın başındaki çerezi nasıl silebilirim? basit bir kodlama var mı?

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'da çerezleri için iyi işlevlere sahiptir w3schools.com/js/js_cookies.asp . setCookie('name', 'value', 0)Bir çerezi silmek için kullanabilirsiniz .
Pete

Yanıtlar:


341

Bunu dene:

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

Veya:

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

Bu şekilde tanımlayabilirsiniz get_cookie():

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

2
nasıl bir işlev ayarlayabilir ve çerezlerimin ne olduğunu ve süresinin dolup dolmadığını nasıl kontrol edebilirim?
Kennedy

61
get_cookie tanımlanmadı
Kreker

9
Fonksiyonun ikinci sürümü artık çalışmıyor Bkz. Jsfiddle jsfiddle.net/b27Lgxgf/1 . @Luca'nın anwser çalışmalarında yaklaşım
Tasos K.

6
Bunun nasıl çalışması gerekiyor? JavaScript'in yerleşik get_cookie()işlevi yoktur.
Michał Perłakowski

4
@ MichałPerłakowski Sadece başka bir yerde tanımlayacağınız gerçek bir işleve yer tutucu / referans olması gerektiğinden eminim.
JSeligsohn

114

İşte Quirksmode üzerinde iyi bir bağlantı .

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
not: toGMTString lehinetoUTCString
drzaus

4
not: çalışmıyorsa, pathdoğru olduğundan emin olun . bkz. developers.google.com/web/tools/chrome-devtools/manage-data/…
Gayan Weerakutti

alan adı eklenmelidir.
Michael Kapustey

3
Ayrıca değer hem yol belirterek ve etki alanı ihtiyacı doğru değerlerine sahip.
Esko

Test edildi, sayfa yüklenmeden önce WKWebView'de bile mükemmel çalışıyor. Çözüm için iyi iş.
Paşa

32

bu işe yarar mı?

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

Max-AgeÇerez oluştururken çerez çerez oturum IE olmak neden biliyorum . Çerezleri silerken nasıl çalıştığından emin değilim.


17

Mozilla'dan unicode desteği olan bir çerez tanımlama işlevinin uygulanması :

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

AngularJs kullanıyorsanız, $ cookies.remove (altında benzer bir yaklaşım kullanır ) deneyin :

$cookies.remove('cookieName');

17

Son kullanma tarihini dün olarak ayarlayarak bunu yapabilirsiniz.

"-1" olarak ayarlamak işe yaramaz. Bu bir çerezi Sessioncookie olarak işaretler.


başka bir sayfaya çerez yerleştirir ve farklı bir sayfadan silmeye çalışırsanız örneğiniz çalışmaz. küme çalışır, ancak silemez.
chovy

2
Bunu kullanarak sona erdi: github.com/carhartl/jquery-cookie Ve yolu kullanarak silmeniz gerekiyor: '/'
chovy

Bu iyi bir yaklaşım dışında ... sadece son kullanma süresini sıfıra ayarlayın. Bu anında sona erecek ve kimseyi karıştırmayacaktır ("Geliştirici neden sona erme zamanını dün belirledi? Bu bir hataydı, bir günlük yaşam süresi istediler mi?"). Kodu daha mantıklı olacak şekilde yazın ve hayatınız daha az kafa karıştırıcı olacaktır. Bu, günümüzde kodlamada değersiz bir felsefedir ... MDN bile bir çerezi silmek için son kullanma süresini sıfıra ayarlamayı önerir.
dudewad

10

Bir çerezi silmek için tekrar boş bir değerle ayarlıyorum ve süresi 1 saniye içinde doluyor. Detaylarda, her zaman aşağıdaki tatlardan birini kullanıyorum (ikincisini tercih etme eğilimindeyim):

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

Kullanımı:

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

Kullanımı:

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

8

Çerezi manuel olarak oluşturduysanız diğer çözümlerden bazıları çalışmayabilir.

Çerezleri silmenin hızlı bir yolu:

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

6

JavaScript ile yapılan bir çerezi silmekte sorun yaşadım ve ana bilgisayarı ekledikten sonra çalıştı (görmek için sağdaki kodu kaydırın location.host). Bir alandaki çerezleri temizledikten sonra sonuçları görmek için aşağıdakileri deneyin:

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);}
 }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.