Jak usunąć plik cookie?


338

Czy moja funkcja tworzenia pliku cookie jest poprawna? Jak usunąć plik cookie na początku mojego programu? czy istnieje proste kodowanie?

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 ma dobre funkcje dla plików cookie na w3schools.com/js/js_cookies.asp . Możesz użyć setCookie('name', 'value', 0)do usunięcia pliku cookie.
Pete,

Odpowiedzi:


341

Spróbuj tego:

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

Lub:

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

Możesz zdefiniować w get_cookie()następujący sposób:

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

2
jak ustawić tę funkcję i sprawdzić, jakie są moje pliki cookie i czy wygasają?
kennedy

61
get_cookie nie jest zdefiniowany
Kreker

9
Druga wersja tej funkcji już nie działa Zobacz jsfiddle jsfiddle.net/b27Lgxgf/1 . Podejście w pracach anwsera @Luca
Tasos K.

6
Jak to ma działać? JavaScript nie ma wbudowanej get_cookie()funkcji.
Michał Perłakowski

4
@ MichałPerłakowski Jestem pewien, że miało to być jedynie symbol zastępczy / odniesienie do faktycznej funkcji, którą zdefiniowałbyś gdzie indziej.
JSeligsohn

114

Oto dobry link na 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
Uwaga: jeśli nie działa, upewnij się, że pathjest poprawny. patrz: developers.google.com/web/tools/chrome-devtools/manage-data/…
Gayan Weerakutti

domena powinna zostać dodana.
Michael Kapustey

3
Warto również zauważyć, że zarówno ścieżka, jak i domena muszą mieć poprawne wartości.
Esko

Testowany, działa doskonale nawet w WKWebView, przed załadowaniem strony. Dobra robota z rozwiązaniem.
PashaN

31

czy to zadziała?

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

Wiem, że Max-Agepowoduje, że plik cookie jest plikiem cookie sesji w przeglądarce IE podczas tworzenia pliku cookie. Nie wiesz, jak to działa podczas usuwania plików cookie.


17

Oto implementacja funkcji usuwania plików cookie z obsługą Unicode w Mozilli:

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

Jeśli korzystasz z AngularJs, wypróbuj $ cookies.remove (poniżej używa podobnego podejścia ):

$cookies.remove('cookieName');

17

Możesz to zrobić, ustawiając datę wygaśnięcia na wczoraj.

Ustawienie go na „-1” nie działa. To oznacza, że ​​ciasteczko to Sessioncookie.


Twój przykład nie działa, jeśli ustawisz plik cookie na innej stronie i spróbujesz usunąć go z innej strony. zestaw działa, ale nie można go usunąć.
chovy,

2
Skończyło się przy użyciu to: github.com/carhartl/jquery-cookie I trzeba usuwać za pomocą ścieżki: „/”
Chovy

To dobre podejście, z wyjątkiem ... po prostu ustaw czas ważności na zero. Spowoduje to natychmiastowe wygaśnięcie i nie będzie mylące dla nikogo („Dlaczego programista ustawił wczoraj termin wygaśnięcia? Czy to był błąd, czy chcieli jednodniowego życia?”). Napisz kod, aby miał więcej sensu, a twoje życie będzie mniej mylące. Jest to obecnie niedoceniana filozofia kodowania ... Nawet MDN sugeruje ustawienie czasu ważności zero na usunięcie pliku cookie.
dudewad

10

Aby usunąć plik cookie, ustawiam go ponownie z pustą wartością i wygasa za 1 sekundę. W szczegółach zawsze używam jednego z następujących smaków (wolę drugi):

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

Stosowanie:

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

Stosowanie:

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

8

Niektóre inne rozwiązania mogą nie działać, jeśli plik cookie został utworzony ręcznie.

Oto szybki sposób na usunięcie pliku cookie:

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

6

Miałem problem z usunięciem pliku cookie utworzonego za pomocą JavaScript i po dodaniu hosta działał (przewiń poniższy kod w prawo, aby zobaczyć location.host). Po wyczyszczeniu plików cookie w domenie spróbuj wykonać następujące czynności:

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);}
 }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.