我无法从JavaScript访问任何Cookie。我需要读取一些值并通过JSON发送给我的自定义检查。
我试图从JS访问cookie,如下所述:
正如你在代码中看到的那样,它被视为下一个水晶:
var c_value = document.cookie;
当我尝试从Chrome的网络调试器访问document.cookie
值时,我只看到观看表达式中的空字符串:
所以我无法读取我需要的cookie值。
我已经检查了cookie名称,我发送该名称以获得相关的值是正确的。 此外,我正在使用 W3Schools 源代码获取cookie,如果您有兴趣(但从第二个链接,技术类似)。
如何解决我的问题?
谢谢!
答案 0 :(得分:109)
您最有可能处理httponly
个Cookie。 httponly
是您可以在Cookie上设置的标志,表示JavaScript无法访问它们。这是为了防止恶意脚本窃取敏感数据甚至整个会话的cookie。
所以你要么必须禁用httponly
标志,要么你需要找到另一种方法来获取你的javascript数据。
通过查看代码,可以很容易地禁用仅http标志:
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 });
现在您应该能够从JavaScript访问cookie信息。但是我不确切地知道你想要获得什么样的数据,所以也许你可以采用另一种方法,例如在页面上使用你需要的信息渲染一些数据属性,而不是试图读取cookie:
<div id="example" data-info="whatever data you are trying to retrieve"></div>
console.log(document.getElementById('example').getAttribute('data-info'));
答案 1 :(得分:2)
我会说http只是你的第一个罪魁祸首,但这也可以通过不设置你的cookie的范围来实现。
如果站点已从其他域重定向,则需要考虑设置cookie的范围。 Domain和Path定义cookie的范围,cookie应发送到哪些URL。根据此情况,您可能无法在回复中看到Cookie。
我在成功进行SAML SSO登录时设置Cookie并且无法从文档中检索Cookie时遇到此问题,因为它从未作为请求的一部分发送。
答案 2 :(得分:2)
还要注意cookie的Path属性,因为cookie只对Path下的子目录可见。我有你的问题,我解决了设置路径“/”
答案 3 :(得分:1)
我有几次相同的问题。而且每次都是因为不同的原因。
不同的原因:
httpOnly
字段的false
,而我试图从控制台访问它。将其设置为true
或从源代码访问即可达到目的。secure
字段的true
,我只用http。Expires / Max-Age
的问题。 Cookie已过时,在document.cookie
中不可见。答案 4 :(得分:0)
如果您的Cookie设置为Set-Cookie
或Set-Cookie2
,则该Cookie不属于响应标头集合:http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method
返回响应中的所有标头,但字段名称为Set-Cookie或Set-Cookie2的标头除外。
答案 5 :(得分:0)
如果您使用某种安全身份验证,那么由于安全原因,您将无法直接访问Cookie。您必须使用以下代码在服务器端更改一些响应属性。
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”){值= data.Login,HttpOnly = false});
但是您不应该这样做,因为它可能会从安全更改为不安全,因此您必须找出在服务器端执行的解决方案以删除Cookie,并允许您执行一些操作。
可以在服务器端进行更改。