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

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

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


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.


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

17

Puede hacerlo estableciendo la fecha de caducidad como ayer.

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


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

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;

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);}
 }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.