2011-04-16 5 views
12

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

je l'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é régler le cookie document expire en 1970

Mais après cela, j'appelle

document.cookie.split(";") 

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

PS: code ci-dessus est de stackoverflow Clearing all cookies with JavaScript

+1

Vous ne pouvez supprimer les cookies qui sont sur le domaine que vous les supprimer de. Vous ne pouvez pas supprimer les cookies inter-domaines. –

+0

Avez-vous débogué avec un bug de feu? quelle est la valeur de document.cookie? –

+0

Publiez vos données de cookie. Cela fonctionne pour moi ici: http://jsfiddle.net/WbGYV/1/ – Calum

Répondre

16

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

Pour corriger j'ai ajouté le domaine de cookie à la valeur réglée

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

Pour voir quel domaine le cookie est réglé sur, dans Chrome, outils de développement open -> Ressources -> les cookies et regardez les champs de domaine .

27

Je viens de rencontrer ce problème et j'ai finalement résolu le problème. Votre cookie n'est probablement pas supprimé, car lorsque vous définissez la nouvelle valeur, elle 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];" 

que la valeur « quelque chose » doit aligner avec tout ce qui ont mis les cookies existants. Les débogueurs JS peuvent ne pas vous fournir de détails sur le chemin et le domaine, mais il deviendra évident sur lequel vous ne correspondez pas si vous recherchez la valeur du cookie existant dans vos paramètres Chrome-> ou similaire panneau dans Firefox/Safari/IE. Faites-moi savoir si cela peut vous aider.

+1

J'ai trouvé ce problème dans IE et Edge. Il est préférable de toujours définir le chemin d'accès à quelque chose, car la valeur par défaut sera la page qui définit le cookie. Donc, si vous essayez de l'expirer sur une page différente, le chemin ne correspondra pas et il n'expirera pas. dans IE et Edge, il semble masquer l'expiration et le chemin de la valeur document.cookie, donc vous ne pouvez pas dériver où le cookie a été défini en regardant la valeur. si vous en avez besoin, enregistrez le chemin de la page de paramétrage dans la valeur du cookie afin de pouvoir l'extraire ultérieurement. ou toujours ajouter "; path = /;" à la valeur de cookie. alors il expirera de n'importe quelle page. –

+0

Fonctionne. Meilleure solution. – Sibidharan

+0

J'ai sauvé mon temps. Merci :) –

0

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

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" avec location.host.split ('') tranche (-2) .join ("") de sorte que je toujours obtenir le nom de domaine sans sous-dossiers, par exemple mail.google.com deviendrait google.com. lors de la mise expiration des cookies que nous devrions ignorer l'subdemain (au moins dans mon cas ce fut le cas.

0

Clear session cookies in ie11?

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

Il suffit d'exécuter le code JavaScript comme ci-dessous

document.execCommand("ClearAuthenticationCache") 

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

0

J'ai rencontré 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 il ne l'a pas. Après avoir regardé l'inspecteur de Chrome (onglet Application -> Barre latérale de stockage -> Cookies), j'ai remarqué que certains cookies avaient des domaines différents. Exemple:

.mydoamin.com 
sub.mydomain.com 

Donc, ma solution était 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;'; 
};