无法从 JS 中的 document.cookie 访问 cookie,但浏览器显示 cookie 存在

IT技术 javascript cookies get document key-value
2021-02-11 16:57:50

我无法从 JavaScript 访问任何 cookie。我需要读取一些值并通过 JSON 发送它们以进行我的自定义检查。

我尝试从 JS 访问 cookie,就像在以下位置描述的那样:

正如您在代码中看到的那样,接下来它看起来像水晶一样清晰:

var c_value = document.cookie;

当我尝试document.cookie从 Chrome 的网络调试器访问值时,我在Watch 表达式中只看到空字符串

所以我无法读取我需要的 cookie 值。

我检查了 cookie 名称,我发送该名称以获取相关值是正确的。另外,如果您有兴趣,我正在使用W3Schools源代码来获取 cookie(但从第二个链接来看,该技术是类似的)。

我该如何解决我的问题?

6个回答

您很可能正在处理httponlycookie。httponly是您可以在 cookie 上设置的标志,这意味着它们不能被 JavaScript 访问。这是为了防止恶意脚本窃取带有敏感数据甚至整个会话的 cookie。

因此,您要么必须禁用该httponly标志,要么需要找到另一种方法将数据发送到您的 javascript。

通过查看您的代码,禁用 http only 标志应该很容易:

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'));

我会说 http only 是您的第一个罪魁祸首,但这也可能通过不设置 cookie 的范围而发生。

如果该站点已从另一个域重定向,则您需要考虑设置 cookie 的范围。Domain 和 Path 定义了 cookie 的范围,cookie 应该发送到哪些 URL。根据这一点,您可能不会在响应中看到 cookie。

我在成功的 SAML SSO 登录上设置 cookie 时遇到了这个问题,但无法从文档中检索 cookie,因为它从未作为请求的一部分发送。

还要注意 cookie 的 Path 属性,因为 cookie 只对 Path 下的子目录可见。我遇到了你的问题,我解决了设置路径“/”

我多次遇到同样的问题。而每一次,都是出于不同的原因。

不同的原因:

  • httpOnly领域的问题它被设置为false,我试图从控制台访问它。将它设置为true或从源代码访问它就行了。
  • secure领域的问题它是true,我只使用 http。
  • 的问题Expires / Max-Agecookie 已过时,在document.cookie.

如果您的 cookie 设置为Set-CookieSet-Cookie2不是响应标头集合的一部分:http : //www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method

返回响应中的所有标头,但字段名称为 Set-Cookie 或 Set-Cookie2 的标头除外。