Ne peut pas accéder à des cookies à partir d'un document.cookie en JS, mais le navigateur affiche les cookies existent
Je ne peux pas accéder aux cookies à partir de JavaScript. J'ai besoin de lire une certaine valeur et de les envoyer via JSON pour mes vérifications spécifiques.
J'ai essayé d'accéder à des cookies JS, comme il a été décrit à:
Comme vous pouvez le voir dans le code, il est considéré comme clair comme un cristal à l'autre:
var c_value = document.cookie;
Lorsque j'essaye d'accéder à la document.cookie
valeur à partir du Chrome web du débogueur, je ne vois que la chaîne vide à la Watch expressions:
Donc je ne peux pas lire les cookies de valeur, dont j'ai besoin.
J'ai vérifié le nom du cookie, dont je suis l'envoi d'obtenir une valeur associée EST correct.
Aussi, je suis en utilisant le W3Schools code source pour obtenir des cookies, si vous êtes intéressé (mais à partir de la 2ème lien, la technique est similaire).
Comment puis-je résoudre mon problème?
Merci!
- Êtes-vous sûr que le cookie n'a pas uniquement http indicateur activé?
- Vraiment? Je ne sais pas. Je travaille sous ASP.NET MVC 4 (Rasoir) du projet, et ne sais pas prend-il en charge par l'activation par défaut de ce paramètre. Ne soyez pas en colère contre moi 🙂 je suis un débutant de développement web.
- Inspecter le cookie dans votre navigateur et il faut dire qu'il est httponly ou pas.
- J'ai inspecté, si il y a une case dans HTTP colonne à la table des témoins spectateur dans google Chrome, webtools, donc ça veut dire que mes cookies sont uniquement HTTP? Si oui, si mon projet utilise seulement les cookies HTTP, et je ne comprends pas comment résoudre mon problème 🙁
- Oui. Cela signifie qu'ils sont des cookies httponly. Qui est souvent exactement ce que vous voulez, car il protège votre contre certains types d'attaques. Avez-vous le contrôle sur la façon dont les cookies sont réglés? Si oui: quelle langue utilisez-vous? Aussi de quoi avez-vous besoin de cookies pour info, parce que peut-être il ya une pâte façon.
- Oui j'ai un contrôle de ce type. Les Cookies sont de réglage par le serveur-côté de la réponse. Je suis à l'aide de C# à mon ASP.NET MVC4 projet. La partie que je suis paramétrage des cookies: ideone.com/fBqtke
- Eh bien, je ne sais pas beaucoup au sujet de l'asp, mais en fonction de votre code, il devrait être assez évident que la façon de désactiver les cookies httponly 😛
- alors, avez-vous des suggestions, comment le résoudre? Je suis googler droit maintenant. Tous les sites web vous suggérons d'utiliser
document.cookie
, Chrome outil web montrant tous mes cookies et les contrôles Http colonne. Pourquoi il n'est pas accessible à partir de ladocument.cookie
? - Le problème n'est pas sur le côté client, mais sur le server-side. Vous souhaiterez peut-être désactiver le drapeau httponly en cours de réglage.
- Avez désactivé le même résultat dans le webdebugger 🙁
- Je suis tenté de marquer tous vos commentaires pour être sévèrement non-constructif. C'est blatently évident que le problème ici, c'est un cas classique de Pas Assez de jQuery
- Il a été constructif, autant qu'il pouvait l'être. Je n'ai pas besoin de jQuery. J'ai fixé. Il était à côté serveur d'un problème avec l'auto-exécutoire HttOnly paramètre. Ainsi, grâce à la PeeHaa.
- Merci! Comme nous ne voyons pas de jQuery nécessaires pour ce genre de chose. Pouvez-vous poster une réponse à cette question? Je ne vous marque comme la bonne.
Vous devez vous connecter pour publier un commentaire.
Vous êtes le plus susceptible de traiter avec
httponly
cookies.httponly
est un drapeau que vous pouvez définir sur les cookies, ce qui signifie qu'ils ne peuvent pas être accessibles par JavaScript. C'est pour empêcher les scripts de voler des cookies avec des données sensibles ou même des sessions entières.Donc, vous devez désactiver le
httponly
drapeau ou vous avez besoin de trouver une autre façon d'obtenir les données de votre javascript.En regardant votre code, il devrait être facile à désactiver uniquement http drapeau:
Maintenant, vous devriez être en mesure d'accéder à l'information des cookies à partir de JavaScript. Cependant, je ne sais pas exactement quel type de données que vous essayez d'obtenir peut-être alors vous pouvez aller pour une autre approche de la place, et par exemple de rendre certaines données de l'attribut sur la page avec les informations dont vous avez besoin au lieu d'essayer de lire le cookie:
Je dirais http seulement 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ée à partir d'un autre domaine, vous aurez besoin de regarder dans la détermination de la portée du cookie. Domaine et le Chemin d'accès définit le champ d'application du cookie, les Url le cookie doit être envoyé à. En fonction de cela, vous pourriez ne pas voir le cookie dans votre réponse.
J'ai couru à travers cette question lors de la définition d'un cookie sur le succès de la SAML SSO de connexion et n'a pas pu récupérer le cookie à partir du Document parce qu'il n'a jamais été envoyer en tant que partie de la demande.
garder un oeil aussi pour le Chemin du cookie attribut, comme le cookie est seulement visible par les sous-répertoires du Chemin d'accès. J'ai eu votre question et j'ai résolu le paramètre Path "/"
Si votre cookie est défini comme
Set-Cookie
ouSet-Cookie2
il ne fait pas partie des en-têtes de réponse de la collection: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-methodRenvoie la tous les en-têtes de la réponse, à l'exception de ceux dont le nom de champ est Set-Cookie ou Set-Cookie2.
Si vous utilisez une authentification sécurisée alors que vous ne pourriez pas accéder à des cookies directement parce que de sécurité. vous devez modifier certains de réponse de l'attribut côté serveur à l'aide de code ci-dessous .
Réponse.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;");
Réponse.SetCookie(nouveau HttpCookie("session-id") { Valeur = Guid.NewGuid().ToString(), HttpOnly = false });
Réponse.SetCookie(nouveau HttpCookie("nom d'utilisateur") { Valeur = données.De connexion, HttpOnly = false });
Mais vous ne devriez pas, car il peut changer sécurisé de l'onu-sécurisé, de sorte que vous devez trouver la solution qui sera fait à côté serveur pour supprimer les cookies et permet de faire certaines opérations.
Il est possible de faire des changements dans le côté serveur.