Supprimer le cookie par nom?


151

Comment puis-je supprimer un cookie spécifique avec le nom roundcube_sessauth?

Ne devrait pas ce qui suit:

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

Puis:

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

Tuez le roundcube_sessauthcookie?


1
name? À quoi ça sert? Ou est-ce une gueule de bois d'une version plus polyvalente qui vous permet de spécifier le nom du cookie?
paxdiablo

Ne pensez pas que c'est une dupe. Il demande spécifiquement de supprimer tous les cookies.
paxdiablo

1
Je ne veux pas supprimer tous les cookies ... Un seul. J'ai trouvé le code de base en cherchant sur Google. Et bien sûr je l'ai essayé. @Paxdiablo Je l'ai supposé pour nommer le cookie, mais je me trompe peut-être complètement.
Charlie

@paxdiablo - ...How can I delete a specific cookie
Derek 朕 會 功夫

1
@Derek et al, vous semblez mal comprendre. Je disais que la dupe proposée par Gabe n'était pas du tout une dupe parce que la dupe proposée demandait de supprimer tous les cookies et cette question concerne la suppression d'un cookie spécifique . Je ne me plaignais en aucune façon de cette question, forme ou forme :-)
paxdiablo

Réponses:


252

Vous devez définir le chemin sur lequel le cookie existe pour vous assurer que vous supprimez le cookie correct.

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 vous ne spécifiez pas le chemin, le navigateur définira un cookie par rapport à la page sur laquelle vous vous trouvez actuellement, donc si vous supprimez le cookie sur une autre page, l'autre cookie continue son existence.

Modifier basé sur le commentaire de @Evan Morrison.
Sachez que dans certains cas, pour identifier le bon cookie, le Domainparamètre est obligatoire.
Habituellement, il est défini comme Domain=.yourdomain.com.
Placer un point devant votre nom de domaine signifie que ce cookie peut exister sur n'importe quel sous-domaine ( wwwcompte également comme sous-domaine).

De plus, comme mentionné dans la réponse de @ RobertT, les HttpOnlycookies ne peuvent pas être supprimés avec JavaScript côté client.


23
Cela me rendait fou! Après avoir ajouté Path = /, j'ai pu supprimer. Merci!
duyn9uyen

12
Cela devrait être la bonne réponse, cela ne fonctionne pas sans Pathdans la plupart des cas.
SuperMarco

9
Je n'ai pas pu supprimer un cookie jusqu'à ce que j'aie ajouté à la fois le chemin et le bon 'Domaine = valeur; '... Ma déclaration était donc: document.cookie = "cookieName =; path = /; expires = Thu, 01 Jan 1970 00:00:01 GMT; domain = .myDomain.com"
Evan Morrison

1
Cette solution fonctionne toujours, mais peut être écrite un peu plus de manière concise avec Max-Age=0, si vous vous souciez de telles choses.
MaxPRafferty

181

Afin de supprimer un cookie, définissez la expiresdate sur quelque chose du passé. Une fonction qui fait cela serait.

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

Ensuite, pour supprimer un cookie nommé, roundcube_sessauthfaites simplement.

delete_cookie('roundcube_sessauth');

1
J'ai l'impression que cela devrait fonctionner (il semble que cela devrait fonctionner: D!), Mais je visualise les cookies définis par ma page dans Firefox et lorsque je clique sur le bouton "KILL", le cookie n'est pas supprimé. Une idée pourquoi?
Charlie

Cela fonctionne dans Google Chrome. Installez Firebug et voyez s'il y a des erreurs.

1
Aucune erreur, je suppose que ce n'est tout simplement pas la suppression du cookie dans Roundcube. Cela supprime probablement très bien les autres cookies.
Charlie

39
Pour les utilisateurs qui recherchent une réponse à cette question, veuillez consulter la réponse ci-dessous. La path=/clé est importante pour la compatibilité du navigateur.
bencripps

2
Cette réponse n'a pas fonctionné pour moi sur Chrome, je ne l'ai pas essayée dans Firefox. Mais la réponse d'emii ci-dessous a fonctionné.
Daniel F

11

// si passé exMins = 0, il sera supprimé dès qu'il le crée.

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.

exMins n'est pas défini dans cet exemple, vous vouliez probablement dire exdays
bhurlow

Ouais ... à la place, renommez l'argument exdays en exMins .. merci #BhBh
Kishor Patil

7

Je ne sais pas vraiment si c'était le cas avec la version Roundcube de mai 2012, mais pour la version actuelle, la réponse est que vous ne pouvez pas supprimer le roundcube_sessauthcookie de JavaScript, car il est marqué comme HttpOnly. Et cela signifie qu'il n'est pas accessible à partir du code côté client JS et ne peut être supprimé que par un script côté serveur ou par une action directe de l'utilisateur (via certains mécanismes de navigateur comme le débogueur intégré ou un plugin).


1

Vous pouvez essayer cette solution

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

0

Dans mon cas, j'ai utilisé du code de coup pour différents environnements.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.