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

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

我试图从JS访问cookie,就像它被描述:

  • http://www.w3schools.com/js/js_cookies.asp
  • 按名称获取Cookie

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

var c_value = document.cookie; 

当我尝试从Chrome的Webdebugging器访问document.cookie值时,我只能看到Watchexpression式中的空string:

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

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

我该如何解决我的问题?

谢谢!

你很可能处理httponlycookies。 httponly是一个标志,你可以设置cookie意味着他们不能被JavaScript访问。 这是为了防止恶意脚本窃取敏感数据甚至整个会话的cookie。

所以你要么必须禁用httponly标志,否则你需要find另一种方式来获取你的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只是你的第一个罪魁祸首,但这也可以通过不设置你的cookie的范围。

如果该网站已被redirect到其他域,则需要查看设置Cookie的范围。 域和path定义了cookie的范围,cookie应该发送到哪个URL。 根据这个,你可能在你的回应中看不到cookie。

当在成功的SAML SSOlogin中设置cookie时,我遇到了这个问题,并且无法从文档中检索到cookie,因为它从来没有作为请求的一部分发送。

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

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