jquery, supprimer les cookies

90

Je souhaite utiliser JQuery pour supprimer les cookies; J'ai essayé ça

$.cookie('name', '', { expires: -1 });

Ensuite, je rafraîchis la page et le cookie est toujours là:

alert('name:' +$.cookie('name'));

Pourquoi? Merci

user319854
la source
certains navigateurs supprimeront le cookie uniquement après le redémarrage du navigateur.
ZOLDIK le

Réponses:

145

Pour supprimer un cookie avec JQuery, définissez la valeur sur null:

$.cookie("name", null, { path: '/' });

Edit: La solution finale était de spécifier explicitement la pathpropriété chaque fois que vous accédez au cookie, car l'OP accède au cookie à partir de plusieurs pages dans différents répertoires, et donc les chemins par défaut étaient différents (cela n'a pas été décrit dans la question d'origine). La solution a été découverte dans la discussion ci-dessous, ce qui explique pourquoi cette réponse a été acceptée - bien qu'elle ne soit pas correcte.

Pour certaines versions de cookie jQ, la solution ci-dessus définira le cookie sur la chaîne null. Ne supprimant donc pas le cookie. Utilisez plutôt le code suggéré ci-dessous.

$.removeCookie('the_cookie', { path: '/' });
Chadwick
la source
Mais à partir de la source ici: plugins.jquery.com/files/jquery.cookie.js.txt : if (value === null) { value = '';options.expires = -1;}que ce qui se passe à l' intérieur de la fonction de traitement, de sorte qu'ils sont censés effectuer les mêmes. (les paramètres sont (name, value, options))
aularon
9
Le code de configuration des cookies et le code de test sont-ils sur la même page? Sinon, vous devrez définir explicitement pathles options dans les deux commandes, car il correspond par défaut au chemin de la page actuelle. Testez en définissant la racine de votre domaine à la fois dans tous les endroits où le cookie est lu et écrit:$.cookie('name', value, {path:'/'})
Chadwick
1
Chadwick> Peut-être que vous avez raison. Par exemple. Je place des cookies dans site.com, puis je vais sur site.com/user, site.com/user/mod, site.com/user/mod/new et je souhaite voir les cookies dans toute cette page. À quoi doit ressembler le chemin, comme ceci: {chemin: '/'}?
user319854
2
Ce code ne supprime pas le cookie, mais définit null dans sa valeur.
Tomzan
12
-1 car cela ne supprime pas réellement le cookie. $.removeCookie('cookie_name')Est-ce que.
Rosdi Kasim
71

Vous pouvez essayer ceci:

$.removeCookie('the_cookie', { path: '/' });

source: https://github.com/carhartl/jquery-cookie#readme

Gert-Jan Rebel
la source
Yah .. Je suis d'accord avec ça
Cataclysm
Lorsque vous utilisez un sous-domaine, vous devrez peut-être également le spécifier. Surtout parce que la période au début du nom de domaine peut être obligatoire (.www.example.com)
Alexis Wilke
Notez que cela n'a pas fonctionné pour nous où le code devait entrer dans une autre fonction pour une raison quelconque. $ .cookie ('name', null) comme ci-dessus semble être plus fiable. Ce cookie de suppression peut cependant fonctionner pour certaines personnes.
Ligemer
C'est en fait la vraie réponse!
Kalaschni
15

Vous pouvez également supprimer les cookies sans utiliser le plugin jquery.cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
Jan Richter
la source
4

c'est le problème de l'incompréhension du cookie. Les navigateurs reconnaissent les valeurs des cookies non seulement pour les clés et comparent également le chemin et le domaine des options. Ainsi, les navigateurs reconnaissent une valeur différente dont la valeur de cookie est «nom» avec l'option de configuration du serveur (chemin = «/»; domaine = «mondomaine.com») et la clé est «nom» sans option.

Logan Kim
la source
1

Essaye ça

 $.cookie('_cookieName', null, { path: '/' });

Le {chemin: '/'} fait le travail pour vous

Otto Kanellis
la source
1

A travaillé pour moi uniquement quand a pathété défini, c'est-à-dire:

$.cookie('name', null, {path:'/'})
Andron
la source
Le vote négatif parce que vous copiez et collez ma réponse comme la vôtre
Otto Kanellis
1
@OttoKanellis donc je suggère de rétrograder également la réponse acceptée (car elle a été modifiée après ma réponse) et de voter contre votre réponse aussi (car vous n'avez pas souligné l'importance du paramètre de chemin )!
Andron
-3

Ce que vous faites est correct, le problème est ailleurs, par exemple, le cookie est à nouveau défini lors de l'actualisation.

Aularon
la source
4
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses aux liens uniquement peuvent devenir invalides si la page liée change.
Uri Agassi
Pour cette réponse même, ce que je dis, c'est que OP le fait de la bonne manière. Le copier-coller du code OP sera redondant et l'ajout d'un autre code sera déroutant pour le lecteur. On peut faire défiler vers le haut et voir ce que faisait l'OP, c'est la "partie essentielle" ici. Cependant, si vous pensez qu'il vaudra mieux inclure quelque chose (apparemment certaines personnes, faites ... L'un d'entre eux a même voté à la baisse ma réponse :)), modifiez simplement la réponse et corrigez-la en conséquence. Regards
aularon
Le problème avec les liens est qu'ils ont tendance à «pourrir» - ils changent, ils bougent, ils disparaissent (cas d'espèce - votre lien est déjà mort!). C'est pourquoi nous préférons que vous citiez le texte correspondant du lien avec lui, afin que votre réponse soit autonome (voir aussi meta.stackexchange.com/questions/8231/… )
Uri Agassi
J'en suis bien conscient, mais encore une fois: ce n'est pas le cas ici. La réponse entière ci-dessus peut être réécrite comme suit: "Ce que vous faites est correct, le problème est ailleurs, par exemple le cookie est en train d'être remis en place lors de l'actualisation". Donc, encore une fois, la pourriture des liens est un problème, y compris la réponse elle-même à côté du lien est la voie à suivre. Ce n'est tout simplement pas pertinent pour cette réponse.
aularon
Donc, encore et encore, si une réponse contient un lien et que ce lien est mort, cela ne signifie pas que la réponse n'est pas assez bonne. Certains liens sont juste là pour fournir des détails supplémentaires, mais ne sont pas nécessaires pour l'exhaustivité de la réponse. Ce comportement me semble être un bot mal programmé qui n'a pas la PNL de base pour comprendre le lien de contexte est donné. Vous devriez probablement arrêter de faire cela.
aularon