jquery, eliminar cookies

90

Quiero usar JQuery para eliminar cookies; Intenté esto

$.cookie('name', '', { expires: -1 });

Luego actualizo la página y la cookie sigue ahí:

alert('name:' +$.cookie('name'));

¿Por qué? Gracias

user319854
fuente
algunos navegadores eliminarán la cookie solo después de reiniciar el navegador.
ZOLDIK

Respuestas:

145

Para eliminar una cookie con JQuery, establezca el valor en nulo:

$.cookie("name", null, { path: '/' });

Editar: La solución final fue especificar explícitamente la pathpropiedad cada vez que se accede a la cookie, porque el OP accede a la cookie desde varias páginas en diferentes directorios y, por lo tanto, las rutas predeterminadas eran diferentes (esto no se describió en la pregunta original). La solución se descubrió en la discusión a continuación, lo que explica por qué se aceptó esta respuesta, a pesar de no ser correcta.

Para algunas versiones de la cookie jQ, la solución anterior establecerá la cookie en una cadena nula. De esta forma no se quita la cookie. Utilice el código como se sugiere a continuación.

$.removeCookie('the_cookie', { path: '/' });
Chadwick
fuente
Pero de la fuente aquí: plugins.jquery.com/files/jquery.cookie.js.txt :, if (value === null) { value = '';options.expires = -1;}eso es lo que va dentro de la función de procesamiento, por lo que se supone que deben realizar lo mismo. (los parámetros son (name, value, options))
aularon
9
¿El código de configuración de cookies y el código de prueba están en la misma página? De lo contrario, deberá establecer explícitamente pathen las opciones de ambos comandos, ya que el valor predeterminado es la ruta de la página actual. Pruebe estableciendo la raíz de su dominio en todos los lugares donde se lee y escribe la cookie:$.cookie('name', value, {path:'/'})
Chadwick
1
Chadwick> Quizás tengas razón. Por ejemplo. configuro cookies en site.com, luego en site.com/user, site.com/user/mod, site.com/user/mod/new y deseo ver cookies en toda esta página. ¿Cómo debe verse la ruta, así: {ruta: '/'}?
user319854
2
Este código no elimina la cookie, pero establece un valor nulo.
Tomzan
12
-1 porque esto en realidad no elimina la cookie. $.removeCookie('cookie_name')hace.
Rosdi Kasim
71

Puedes probar esto:

$.removeCookie('the_cookie', { path: '/' });

fuente: https://github.com/carhartl/jquery-cookie#readme

Rebelde Gert-Jan
fuente
Yah ... Estoy bien con eso
Cataclysm
Cuando utilice un subdominio, es posible que también deba especificarlo. Especialmente porque el punto al principio del nombre de dominio puede ser requerido (.www.example.com)
Alexis Wilke
Tenga en cuenta que esto no funcionó para nosotros cuando el código necesitaba ir a otra función por cualquier motivo. $ .cookie ('nombre', nulo) como arriba parece ser más confiable. Sin embargo, esta cookie de eliminación podría funcionar para algunas personas.
Ligemer
¡Esta es realmente la respuesta real!
Kalaschni
15

También puede eliminar las cookies sin usar el complemento jquery.cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
Jan Richter
fuente
4

es el problema del malentendido de las cookies. Los navegadores reconocen los valores de las cookies no solo para las claves, sino que también comparan las opciones, ruta y dominio. Por lo tanto, los navegadores reconocen diferentes valores de cookies, esa clave es 'nombre' con la opción de configuración del servidor (ruta = '/'; dominio = 'midominio.com') y la clave es 'nombre' sin opción.

logan kim
fuente
1

Prueba esto

 $.cookie('_cookieName', null, { path: '/' });

La {ruta: '/'} hace el trabajo por ti

Otto Kanellis
fuente
1

Funcionó para mí solo cuando pathse configuró, es decir:

$.cookie('name', null, {path:'/'})
Andron
fuente
Votar en contra porque copia y pega mi respuesta como suya
Otto Kanellis
1
@OttoKanellis, así que sugiero rechazar la respuesta aceptada también (porque fue editada después de mi respuesta) y también rechazar tu respuesta (¡porque no has resaltado la importancia del parámetro de ruta )!
Andron
-3

Lo que está haciendo es correcto, el problema está en otro lugar, por ejemplo, la cookie se está configurando nuevamente de alguna manera al actualizar.

aularon
fuente
4
Si bien este enlace puede responder la pregunta, es mejor incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si cambia la página enlazada.
Uri Agassi
Para esta misma respuesta, lo que estoy diciendo es que OP lo está haciendo de la manera correcta. Copiar y pegar el código OP será redundante, y agregar otro código será confuso para el lector. Uno puede desplazarse hacia arriba y ver lo que estaba haciendo el OP, es la "parte esencial" aquí. Sin embargo, si cree que será mejor incluir algo (aparentemente algunas personas, sí ... Uno de ellos incluso rechazó mi respuesta :)), simplemente edite la respuesta y corríjala en consecuencia. Saludos
aularon
El problema con los enlaces es que tienden a "pudrirse", cambian, se mueven, desaparecen (por ejemplo, ¡tu enlace ya está muerto!). Es por eso que preferimos que cite el texto relevante del enlace junto con él, para que su respuesta sea autónoma (consulte también meta.stackexchange.com/questions/8231/… )
Uri Agassi
Soy muy consciente de eso, pero de nuevo: este no es el caso aquí. Toda la respuesta anterior se puede reescribir como "Lo que está haciendo es correcto, el problema está en otro lugar, por ejemplo, la cookie se está configurando nuevamente de alguna manera al actualizar". Entonces, nuevamente, la rotura del enlace es un problema, incluida la respuesta en sí junto al enlace es el camino a seguir. Es simplemente irrelevante para esta respuesta.
aularon
Entonces, una y otra vez, si una respuesta contiene un enlace y ese enlace está muerto, no significa que la respuesta no sea lo suficientemente buena. Algunos enlaces están ahí para proporcionar detalles adicionales, pero no son necesarios para que la respuesta sea completa. Este comportamiento me parece como un bot mal programado que no tiene la PNL básica para entender el enlace de contexto. Probablemente debería dejar de hacer esto.
aularon