¿Eliminar cookie por nombre?

151

¿Cómo puedo eliminar una cookie específica con el nombre roundcube_sessauth?

No debería lo siguiente:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

Y entonces:

<a href="javascript:del_cookie(name);">KILL</a>

¿Matar la roundcube_sessauthgalleta?

Charlie
fuente
1
name? ¿Cual es el punto de eso? ¿O es una resaca de una versión más versátil que le permite especificar el nombre de la cookie?
paxdiablo
No pienses que es un tonto. Específicamente pregunta sobre la eliminación de todas las cookies.
paxdiablo
1
No quiero eliminar todas las cookies ... Solo una. Encontré el código básico buscando en Google. Y por supuesto lo probé. @Paxdiablo Lo asumí por nombrar la cookie, pero podría estar completamente equivocado.
Charlie
@paxdiablo - ...How can I delete a specific cookie
Derek 朕 會 功夫
1
@Derek et al, parece que malinterpretas. Estaba afirmando que el engaño propuesto de Gabe no era un engaño en absoluto porque el engaño propuesto preguntó sobre la eliminación de todas las cookies y esta pregunta se refiere a la eliminación de una cookie específica . No me quejaba de esta pregunta de ninguna manera, forma o forma :-)
paxdiablo

Respuestas:

252

Debe definir la ruta en la que existe la cookie para asegurarse de que está eliminando la cookie correcta.

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Si no especifica la ruta, el navegador establecerá una cookie en relación con la página en la que se encuentra actualmente, por lo que si elimina la cookie mientras está en una página diferente, la otra cookie continúa existiendo.

Edición basada en el comentario de @Evan Morrison.
Tenga en cuenta que, en algunos casos, para identificar la cookie correcta, Domainse requiere el parámetro.
Por lo general, se define como Domain=.yourdomain.com.
Colocar un punto delante de su nombre de dominio significa que esta cookie puede existir en cualquier subdominio ( wwwtambién cuenta como subdominio).

Además, como se menciona en la respuesta de @ RobertT, las HttpOnlycookies no se pueden eliminar con JavaScript en el lado del cliente.

emii
fuente
23
¡Esto me estaba volviendo loco! Después de agregar Path = /, pude eliminar. ¡Gracias!
duyn9uyen
12
Esta debería ser la respuesta correcta, no funciona sin la Pathmayoría de los casos.
SuperMarco
9
No pude eliminar una cookie hasta que agregué la ruta y el valor correcto 'Dominio =; '... Así que mi declaración fue: document.cookie = "cookieName =; ruta = /; caduca = jue, 01 de enero de 1970 00:00:01 GMT; dominio = .myDomain.com"
Evan Morrison
1
Esta solución aún funciona, pero se puede escribir de manera un poco más concisa Max-Age=0, si te interesan esas cosas.
MaxPRafferty
181

Para eliminar una cookie, establezca la expiresfecha en algo en el pasado. Una función que hace esto sería.

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

Luego, para eliminar una cookie llamada roundcube_sessauthsimplemente hazlo.

delete_cookie('roundcube_sessauth');
paxdiablo
fuente
1
Siento que esto debería estar funcionando (parece que debería funcionar: ¡D!), Pero estoy viendo las cookies establecidas por mi página en Firefox y cuando hago clic en el botón "MATAR", la cookie no se elimina. ¿Alguna idea de por qué?
Charlie
Esto funciona en Google Chrome. Instale firebug y vea si hay algún error.
1
Sin errores, supongo que simplemente no está eliminando la cookie en Roundcube. Probablemente elimina otras cookies muy bien.
Charlie
39
Para los usuarios que buscan una respuesta a esta pregunta, consulte la respuesta a continuación. La path=/clave es importante para la compatibilidad del navegador.
bencripps
2
Esta respuesta no me funcionó en Chrome, no la he probado en Firefox. Pero la respuesta de Emii a continuación funcionó.
Daniel F
11

// si se pasa exMins = 0, se eliminará tan pronto como lo cree.

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.
Kishor Patil
fuente
exMins no está definido en este ejemplo, probablemente quiso decir exdays
bhurlow
Sí ... en lugar de cambiar el nombre de exdays a exMins ... gracias #BhBh
Kishor Patil
7

No estoy realmente seguro de si esa era la situación con la versión Roundcube de mayo '12, pero para la actual la respuesta es que no puede eliminar la roundcube_sessauthcookie de JavaScript, ya que está marcada como HttpOnly. Y esto significa que no es accesible desde el código del lado del cliente JS y solo se puede eliminar mediante una secuencia de comandos del lado del servidor o mediante la acción directa del usuario (a través de algunas mecánicas del navegador como el depurador integrado o algún complemento).

RobertT
fuente
1

Puedes probar esta solución

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;
Nafees
fuente
0

En mi caso, utilicé el código de soplado para diferentes entornos.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
Amir Movahedi
fuente