web-dev-qa-db-fra.com

Impossible d'accéder aux cookies de document.cookie dans JS, mais le navigateur indique que les cookies existent

Je ne peux accéder à aucun cookie à partir de JavaScript. Je dois lire certaines valeurs et les envoyer via JSON pour mes contrôles personnalisés.

J'ai essayé d'accéder aux cookies de JS, comme décrit à l'adresse suivante:

Comme vous pouvez le constater sur le code, il est clair comme un cristal le suivant:

var c_value = document.cookie;

Quand j'essaie d'accéder au document.cookie valeur du débogueur Web de Chrome, je ne vois que la chaîne vide au niveau des expressions Watch :

Donc, je ne peux pas lire la valeur des cookies, ce dont j'ai besoin.

J'ai vérifié le nom du cookie, que j'envoie pour obtenir une valeur associée IS correct. De plus, j'utilise le W3Schools code source pour obtenir des cookies, si cela vous intéresse (mais à partir du deuxième lien, la technique est similaire).

Comment puis-je résoudre mon problème?

Merci!

66
user2402179

Vous avez probablement affaire à httponly cookies. httponly est un drapeau que vous pouvez définir sur les cookies, ce qui signifie qu'ils ne sont pas accessibles par JavaScript. Cela évite que des scripts malveillants volent des cookies avec des données sensibles ou même des sessions entières.

Vous devez donc soit désactiver le drapeau httponly, soit trouver un autre moyen de transférer les données sur votre javascript.

En regardant votre code, il devrait être facile de désactiver le drapeau http uniquement:

Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;");
Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false });
Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });

Vous devriez maintenant pouvoir accéder aux informations sur les cookies à partir de JavaScript. Cependant, je ne sais pas exactement quel type de données vous essayez d'obtenir, alors vous pouvez peut-être opter pour une autre approche et, par exemple, afficher un attribut de données sur la page avec les informations dont vous avez besoin au lieu d'essayer de lire le cookie:

<div id="example" data-info="whatever data you are trying to retrieve"></div>
console.log(document.getElementById('example').getAttribute('data-info'));
110
PeeHaa

gardez également un œil sur l'attribut Path du cookie, car le cookie n'est visible que par les sous-répertoires situés sous Path. J'ai eu votre problème et j'ai résolu le paramètre Path "/"

2
ejaenv

Je dirais que seul HTTP est votre premier coupable, mais cela peut également se produire en ne définissant pas la portée de votre cookie.

Si le site a été redirigé depuis un autre domaine, vous devrez examiner la possibilité de définir la portée du cookie. Domaine et chemin définit la portée du cookie, à quelles URL le cookie doit être envoyé. En fonction de cela, il se peut que vous ne voyiez pas le cookie dans votre réponse.

J'ai rencontré ce problème lors de la création d'un cookie lors d'une connexion réussie à l'authentification unique SAML et je ne pouvais pas extraire le cookie du document, car il n'a jamais été envoyé dans le cadre de la demande.

2
Tenzin Palber

Si votre cookie est défini sur Set-Cookie ou Set-Cookie2 _ cela ne fait pas partie de la collection des en-têtes de réponse: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method

Renvoie tous les en-têtes de la réponse, à l'exception de ceux dont le nom de champ est Set-Cookie ou Set-Cookie2.

0
Dunken

Si vous utilisez une authentification sécurisée, dans ce cas, vous ne pourrez pas accéder directement aux cookies en raison de la sécurité. vous devez modifier certains attributs de réponse côté serveur en utilisant le code ci-dessous.

Response.AddHeader ("Set-Cookie", "CookieName = CookieValue; path = /;"); Response.SetCookie (new HttpCookie ("session-id") {Value = Guid.NewGuid (). ToString (), HttpOnly = false}); Response.SetCookie (new HttpCookie ("nom d'utilisateur") {Value = data.Login, HttpOnly = false});

Mais vous ne devriez pas, parce que cela peut changer de manière sécurisée en non sécurisé, vous devez donc trouver la solution qui doit être faite côté serveur pour supprimer les cookies et vous permettre de procéder à certaines opérations.

Il est possible de faire des changements côté serveur.

0
Manas