¿Cómo borrar una cookie?

338

¿Es correcta mi función de crear una cookie? ¿Cómo elimino la cookie al comienzo de mi programa? ¿hay una codificación simple?

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
fuente
1
w3schools tiene buenas funciones para las cookies en w3schools.com/js/js_cookies.asp . Puede usar setCookie('name', 'value', 0)para eliminar una cookie.
Pete

Respuestas:

341

Prueba esto:

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

O:

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

Puedes definir get_cookie()así:

function get_cookie(name){
    return document.cookie.split(';').some(c => {
        return c.trim().startsWith(name + '=');
    });
}
ACP
fuente
2
¿Cómo configuro una función y compruebo cuáles son mis cookies y si caducan?
Kennedy
61
get_cookie no está definido
Kreker
99
La segunda versión de la función ya no funciona Consulte jsfiddle jsfiddle.net/b27Lgxgf/1 . Enfoque en las respuestas de @Luca
Tasos K.
66
¿Cómo se supone que esto funcione? JavaScript no tiene una get_cookie()función incorporada.
Michał Perłakowski
44
@ MichałPerłakowski Estoy bastante seguro de que solo pretendía ser un marcador de posición / referencia a una función real que definirías en otro lugar.
JSeligsohn
114

Aquí un buen enlace sobre 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
fuente
20
nota: toGMTString ha quedado en desuso a favor detoUTCString
drzaus
44
nota: en caso de que no funcione, asegúrese de que pathsea ​​correcto. ver: developers.google.com/web/tools/chrome-devtools/manage-data/…
Gayan Weerakutti
Se debe agregar el dominio.
Michael Kapustey
3
También vale la pena señalar que tanto la ruta como el dominio deben tener valores correctos.
Esko
Probado, funciona perfectamente incluso en WKWebView, antes de cargar la página. Buen trabajo en solución.
PashaN
32

funcionaria esto?

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

Max-Ageque la cookie es una cookie de sesión en IE cuando se crea la cookie. No estoy seguro de cómo funciona al eliminar las cookies.

Collin Anderson
fuente
Establecido en cero, la cookie caducará cuando se cierre la ventana del navegador.
AyexeM
17

Aquí hay una implementación de una función de eliminación de cookies con soporte Unicode de 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");

Si usa AngularJs, pruebe $ cookies.remove (debajo usa un enfoque similar ):

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

Puede hacerlo estableciendo la fecha de caducidad como ayer.

Establecerlo en "-1" no funciona. Eso marca una cookie como Sessioncookie.

Markus Nordhaus
fuente
su ejemplo no funciona si configura la cookie en otra página e intenta eliminarla de una página diferente. el conjunto funciona, pero no puede eliminarlo.
chovy
2
Terminé usando esto: github.com/carhartl/jquery-cookie Y tienes que eliminar usando path: '/'
chovy
Este es un buen enfoque, excepto ... simplemente establezca el tiempo de caducidad en cero. Eso provocará la caducidad instantánea y no será confuso para nadie ("¿Por qué el desarrollador estableció el tiempo de caducidad para ayer? ¿Fue un error, querían una vida útil de un día?"). Escriba el código para que tenga más sentido, y su vida será menos confusa en el futuro. Esta es una filosofía infravalorada en la codificación hoy en día ... Incluso MDN sugiere establecer el tiempo de caducidad en cero para eliminar una cookie.
dudewad
10

Para eliminar una cookie, la configuré nuevamente con un valor vacío y caduca en 1 segundo. En detalles, siempre uso uno de los siguientes sabores (tiendo a preferir el segundo):

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

Uso:

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

Uso:

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

Es posible que algunas de las otras soluciones no funcionen si creó la cookie manualmente.

Aquí hay una forma rápida de eliminar una cookie:

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

Tuve problemas para eliminar una cookie hecha a través de JavaScript y después de agregar el host funcionó (desplace el código de abajo a la derecha para ver location.host). Después de borrar las cookies en un dominio, intente lo siguiente para ver los resultados:

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