437 votes

Effacer tous les cookies avec JavaScript

Comment supprimer tous les cookies du domaine actuel en utilisant JavaScript ?

449voto

Robert J. Walker Points 3712
function deleteAllCookies() {
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

Notez que ce code a deux limitations :

  • Il ne supprimera pas les cookies avec HttpOnly activé, comme le HttpOnly désactive l'accès de Javascript au cookie.
  • Il ne supprimera pas les cookies qui ont été configurés avec une adresse de type Path valeur. (Ceci malgré le fait que ces cookies apparaîtront dans document.cookie mais vous ne pouvez pas le supprimer sans spécifier la même chose. Path valeur avec laquelle il a été fixé).

6 votes

Bien joué, mais après avoir expérimenté, j'ai trouvé qu'un site ne peut avoir qu'un seul cookie sans =, et alors c'est un cookie sans nom, vous obtenez sa valeur en fait. Donc si eqPos == 1, vous devez faire name = "" au lieu de cela, pour effacer la valeur sans nom.

73 votes

Attention ! Si vos cookies sont configurés pour utiliser un chemin d'accès ou un domaine, cet extrait pratique ne fonctionnera pas.

2 votes

C'est vrai. L'extrait pourrait être modifié pour vous demander ces détails, mais cela fonctionne dans la plupart des cas.

81voto

AnthonyVO Points 531

Après avoir été un peu frustré par ce problème, j'ai créé cette fonction qui va tenter de supprimer un cookie nommé de tous les chemins. Appelez cette fonction pour chacun de vos cookies et vous devriez être plus proche de la suppression de tous les cookies que vous ne l'étiez auparavant.

function eraseCookieFromAllPaths(name) {
    // This function will attempt to remove a cookie from all paths.
    var pathBits = location.pathname.split('/');
    var pathCurrent = ' path=';

    // do a simple pathless delete first.
    document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;';

    for (var i = 0; i < pathBits.length; i++) {
        pathCurrent += ((pathCurrent.substr(-1) != '/') ? '/' : '') + pathBits[i];
        document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;' + pathCurrent + ';';
    }
}

Comme toujours, les différents navigateurs ont un comportement différent, mais cela a fonctionné pour moi. Profitez-en.

0 votes

@TomHammond, Cela devrait être une toute nouvelle question. Les principaux problèmes concernent le domaine hébergé par rapport au domaine d'hébergement et votre capacité à contrôler la page hébergée.

3 votes

Cela ne supprimera toujours pas les cookies httpOnly. Ils ne peuvent être modifiés que par HTTP.

0 votes

Merci, ça a marché pour moi.

12voto

jichi Points 561

Si vous avez accès à la jquery.cookie plugin, vous pouvez effacer tous les cookies de cette manière :

for (var it in $.cookie()) $.removeCookie(it);

0 votes

Je viens de l'essayer sur mon propre site web, qui a supprimé tous les cookies. Est-ce que @Cerin sama pourrait essayer d'exécuter le code suivant dans la console avant et après avoir effacé les cookies ? "for (var it in $.cookie()) console.log(it) ;"

0 votes

Jichi avez-vous inclus la bibliothèque jquery en même temps que le plugin jquery.cookie ?

11voto

ConroyP Points 24021

Pour autant que je sache, il n'y a aucun moyen de supprimer tous les cookies du domaine. Vous pouvez effacer un cookie si vous connaissez le nom et si le script est sur le même domaine que le cookie.

Vous pouvez définir la valeur à vide et la date d'expiration à un moment donné dans le passé :

var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString(); 

Il y a un excellent article ici sur la manipulation des cookies en utilisant le javascript.

11 votes

Vous pouvez aussi simplement faire document.cookie="username;expires=" + new Date(0).toGMTString() - Il n'y a pas beaucoup de différence si le cookie expire il y a une seconde ou en 1970.

0 votes

Merci pour cet article !

1voto

Sec Points 2786

Vous pouvez en obtenir la liste en consultant la variable document.cookie. Pour les effacer tous, il suffit de les parcourir en boucle et de les effacer un par un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X