Ich kann über JavaScript nicht auf Cookies zugreifen. Ich muss einen Wert lesen und ihn für meine benutzerdefinierten Prüfungen über JSON senden.
Ich habe versucht, auf Cookies von JS zuzugreifen, wie es beschrieben wurde unter:
Wie Sie im Code sehen können, ist es beim nächsten Mal so klar wie ein Kristall:
var c_value = document.cookie;
Wenn ich versuche, über document.cookie
den Web-Debugger von Chrome auf den Wert zuzugreifen , wird in den Watch-Ausdrücken nur die leere Zeichenfolge angezeigt :
Daher kann ich den von mir benötigten Cookie-Wert nicht lesen.
Ich habe den Cookie-Namen überprüft, den ich sende, um einen zugehörigen Wert zu erhalten. Außerdem verwende ich den W3Schools- Quellcode, um Cookies zu erhalten, wenn Sie interessiert sind (aber ab dem 2. Link ist die Technik ähnlich).
Wie kann ich mein Problem beheben?
document.cookie
. Das Chrome-Webtool zeigt alle meine Cookies und Überprüfungen in der Spalte "HTTP" an. Warum ist es nicht von der zugänglichdocument.cookie
?Antworten:
Sie haben es höchstwahrscheinlich mit
httponly
Cookies zu tun .httponly
ist ein Flag, das Sie für Cookies setzen können, was bedeutet, dass JavaScript nicht auf sie zugreifen kann. Dies soll verhindern, dass böswillige Skripte Cookies mit vertraulichen Daten oder sogar ganze Sitzungen stehlen.Sie müssen also entweder das
httponly
Flag deaktivieren oder einen anderen Weg finden, um die Daten in Ihr Javascript zu übertragen.Wenn Sie sich Ihren Code ansehen, sollte es einfach sein, das Nur-http-Flag zu deaktivieren:
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 });
Jetzt sollten Sie über JavaScript auf die Cookie-Informationen zugreifen können. Ich weiß jedoch nicht genau, welche Art von Daten Sie abrufen möchten. Vielleicht können Sie stattdessen einen anderen Ansatz wählen und beispielsweise ein Datenattribut auf der Seite mit den benötigten Informationen rendern, anstatt zu versuchen, das Cookie zu lesen:
<div id="example" data-info="whatever data you are trying to retrieve"></div>
console.log(document.getElementById('example').getAttribute('data-info'));
quelle
Ich würde sagen, nur http ist Ihr erster Schuldiger, aber dies kann auch passieren, wenn Sie den Umfang Ihres Cookies nicht festlegen.
Wenn die Site von einer anderen Domain umgeleitet wurde, müssen Sie den Umfang des Cookies festlegen. Domäne und Pfad definieren den Bereich des Cookies, an welche URLs das Cookie gesendet werden soll. Abhängig davon wird das Cookie möglicherweise nicht in Ihrer Antwort angezeigt.
Ich habe dieses Problem beim Setzen eines Cookies bei einer erfolgreichen SAML-SSO-Anmeldung festgestellt und konnte das Cookie nicht aus dem Dokument abrufen, da es nie als Teil der Anforderung gesendet wurde.
quelle
Behalten Sie auch das Pfadattribut des Cookies im Auge, da das Cookie nur für Unterverzeichnisse unter Pfad sichtbar ist. Ich hatte Ihr Problem und habe das Einstellen des Pfads "/" gelöst.
quelle
Ich hatte mehrmals das gleiche Problem. Und jedes Mal war es aus einem anderen Grund.
Verschiedene Gründe:
httpOnly
Feldes. Es war auf eingestelltfalse
und ich habe versucht, über die Konsole darauf zuzugreifen. Estrue
hat den Trick gemacht, es auf den Quellcode einzustellen oder darauf zuzugreifen.secure
Feldes. Es wartrue
und ich benutzte nur http.Expires / Max-Age
. Der Cookie war veraltet und in war nicht sichtbardocument.cookie
.quelle
Wenn Ihr Cookie als Teil der Antwortheader-Sammlung festgelegt ist
Set-Cookie
oderSet-Cookie2
nicht: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-methodGibt alle Header aus der Antwort zurück, mit Ausnahme derjenigen, deren Feldname Set-Cookie oder Set-Cookie2 ist.
quelle
Wenn Sie eine sichere Authentifizierung verwenden, können Sie in diesem Fall aus Sicherheitsgründen nicht direkt auf Cookies zugreifen. Sie müssen einige Antwortattribute auf der Serverseite mithilfe des folgenden Codes ändern.
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 });
Sie sollten dies jedoch nicht tun, da es sich möglicherweise um sicher in nicht sicher ändert. Sie müssen daher eine Lösung finden, die auf der Serverseite ausgeführt wird, um Cookies zu löschen und einige Vorgänge zuzulassen.
Es ist möglich, Änderungen auf der Serverseite vorzunehmen.
quelle