web-dev-qa-db-fra.com

Impossible de supprimer le cookie de javascript

Je suis sur un site externe et j'essaie de supprimer le cookie via javascript.

J'ai fait ce qui suit dans la console:

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";
    }
}

deleteAllCookies()

qui est censé définir le cookie de document pour expirer en 1970

Mais après ça, j'appelle

document.cookie.split(";")

Les cookies sont apparemment intacts. Des idées pourquoi?

PS: le code ci-dessus provient de stackoverflow Effacement de tous les cookies avec JavaScript

15
ming yeow

Je viens de rencontrer ce problème et je l'ai finalement résolu. Il est fort probable que votre cookie ne soit pas supprimé, car lorsque vous définissez la nouvelle valeur, il doit correspondre au chemin et au domaine du cookie d'origine que vous essayez de supprimer.

En d'autres termes:

 document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=[something];"

cette valeur "quelque chose" doit s'aligner sur tout ce que les cookies existants ont défini.

Les débogueurs JS peuvent ne pas vous donner de détails sur le chemin et le domaine, mais vous ne saurez pas à quoi vous correspondez si vous recherchez la valeur du cookie existant dans vos paramètres Chrome-> ou un panneau similaire dans Firefox Safari/IE.

Faites-moi savoir si cela vous a été utile.

38
Stan Lin

J'ai eu le même problème. J'ai découvert que le cookie était défini sous un sous-domaine vide, par exemple. le domaine de cookie était ".domain.com" et mon site Web était hébergé sur "sub.domain.com".

Pour réparer, j'ai ajouté le domaine de cookie à la valeur définie

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=.domain.com";

Pour voir quel domaine est défini pour le cookie, dans Chrome, ouvrez Outils de développement -> Ressources -> Cookies et consultez les champs du domaine.

18
WearyMonkey

Effacer les cookies de session dans ie11?

Peut être le lien ci-dessus peut donner une aide

Il suffit de lancer le JavaScript comme ci-dessous

document.execCommand("ClearAuthenticationCache")

J'ai essayé et le cookie a été effacé.

0
Bin Liu

J'ai eu un problème similaire en essayant de supprimer certains cookies. Parfois, cela a fonctionné:

document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;';

... et parfois non.

Après avoir examiné l'inspecteur Chrome (onglet Application -> barre latérale Stockage -> Cookies), j'ai constaté que certains cookies étaient configurés avec différents domaines. Exemple:

.mydoamin.com
sub.mydomain.com 

Ma solution a donc été de créer une fonction générique qui supprime le cookie de tous les domaines.

var deleteCookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=.mydomain.com;';
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=sub.mydomain.com;';
};

0
Ponyboy

Je travaillais sur un bookmarklet de navigateur pour supprimer les cookies du domaine actuel, j'avais le même problème, mon problème était que je n'utilisais pas de domaine non plus. Voici ma valeur bookmarklet éventuellement:

javascript: (function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";domain=." + location.Host.split('.').slice(-2).join(".") +";path=/"); }); })();

Notez que je remplace "domain.com" par location.Host.split ('.'). Slice (-2) .join (".") Afin d’obtenir toujours le nom de domaine sans sous-domaines, c’est-à-dire mail.google.com. deviendrait google.com. lors de la définition de l'expiration des cookies, nous devrions ignorer le sous-terme (du moins dans mon cas, c'était le cas.

0
Mohammad Baygi