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?

Charlie
la source
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.

emii
la source
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');
paxdiablo
la source
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.
Kishor Patil
la source
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).

RobertT
la source
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;
Nafees
la source
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('.')}`;
Amir Movahedi
la source