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

Javascript Can';无法从JS中的document.cookie访问cookie,但浏览器显示cookie存在,javascript,cookies,get,document,key-value,Javascript,Cookies,Get,Document,Key Value,我无法从JavaScript访问任何cookie。我需要读取一些值,并通过JSON发送它们以进行自定义检查 我尝试从JS访问Cookie,如以下所述: 正如您在代码中看到的,它在下一个代码中被视为像水晶一样清晰: var c_value = document.cookie; 当我试图从Chrome的web调试器访问document.cookie值时,我在监视表达式中只看到空字符串: 所以我无法读取我需要的cookies值 我已经检查了cookie名称,我发送该名称以获取关联的值是正确的

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

我尝试从JS访问Cookie,如以下所述:

正如您在代码中看到的,它在下一个代码中被视为像水晶一样清晰:

var c_value = document.cookie;
当我试图从Chrome的web调试器访问
document.cookie
值时,我在监视表达式中只看到空字符串:

所以我无法读取我需要的cookies值

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


如何解决我的问题?

您很可能正在处理
httponly
cookies
httponly
是可以在cookie上设置的标志,表示JavaScript无法访问cookie。这是为了防止恶意脚本窃取具有敏感数据甚至整个会话的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>

如果您的cookie设置为
set cookie
set-Cookie2
,则它不属于响应头集合的一部分:


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

我想说http只是第一个罪魁祸首,但如果不设置Cookie的范围,也会发生这种情况

如果站点已从另一个域重定向,则需要查看cookie范围的设置。域和路径定义cookie的作用域,cookie应发送到哪些URL。根据这一点,您可能无法在响应中看到cookie


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

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

的问题。如果您使用的是安全身份验证,则由于安全原因,您无法直接访问cookies。您必须使用下面的代码更改服务器端的某些响应属性

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 });
但您不应该这样做,因为它可能会从安全更改为不安全,所以您必须找到在服务器端执行的解决方案,以删除cookie并允许您执行一些操作


在服务器端进行更改是可能的。

我多次遇到同样的问题。每次都是因为不同的原因

不同原因:

  • httpOnly
    字段的问题。它被设置为
    false
    ,我试图从控制台访问它。将它设置为
    true
    或从源代码访问它就可以实现这一目的
  • 安全
    字段的问题。这是
    true
    ,我只使用了http
  • 过期/最长期限问题
    。cookie已过期,在
    文档中不可见。cookie

@PeeHaa真的吗?我不知道。我在ASP.NETMVC4(Razor)项目下工作,不知道默认情况下是否支持启用此参数。别生我的气:)我是网络开发的新手。检查浏览器中的cookie,它应该说明它是否为httponly。@PeeHaa我已经检查过,如果Chrome的webtools中cookies查看器的表中有check in HTTP列,那么这是否意味着我的cookie仅为HTTP?如果是,那么我的项目只使用HTTP cookies,我不知道如何解决我的问题:(@PeeHaa是的,我确实有这样一个控件。cookie是通过服务器端响应设置的。我在ASP.NET MVC4项目中使用C#。我设置cookie的部分:@PeeHaa那么,你有什么建议,如何修复它吗?我现在在谷歌上搜索。所有网站都建议使用
document.cookie
,Chrome的webtool在Htt下显示我的所有cookie和检查p列。为什么不能从
文档中访问它。cookie
?另外!顺便说一下,我发现了一些信息,HttpOnly没有真正保护,可能没有设置。你怎么看?HttpOnly不是silverbullet。但是它可以保护你免受特定类型的攻击。
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 });