Javascript document.cookie总是空字符串

时间:2013-04-10 00:10:24

标签: javascript cookies

我对客户端javascript设置cookie有这个真正奇怪的问题。我正在开发一个小页面的演示,目前使用cookie来存储一些'偏好'。请注意,我不能在此演示或任何第三方jQuery插件中使用服务器端语言。

所以我写了一个javascript对象来设置一个cookie:

var cookie = {
  set: function (name,value,exdays) {

    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var value = escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=name + "=" + value;
    console.log(document.cookie);
  }
}

cookie.set('foo','bar',2);
console.log(document.cookie);

它只返回一个空字符串。我已经进入Chrome控制台,看看我是否可以通过直接修改document.cookie

来实现
> document.cookie = "foo=bar";
"foo=bar"
> document.cookie
""

如何通过客户端javascript设置cookie?

编辑:我未处于隐身模式且已启用Cookie。

5 个答案:

答案 0 :(得分:50)

无法通过Javascript访问HttpOnly cookie,会话cookie通常设置为HttpOnly cookie。另请参阅此StackOverflow问题: How to read a secure cookie using JavaScript

所以...检查你想要阅读的cookie是否设置了'HttpOnly'标志......如果是这样,你知道罪魁祸首。 这不是一个错误,它是一个功能!

答案 1 :(得分:41)

如果没有在网络服务器上运行,你就不能通过外观来设置cookie。

file:///C:/Users/me/Desktop/demo/demo.html

但是:

http://localhost/demo/demo.html有效。

答案 2 :(得分:0)

有关用法和文档,请参阅此处:

https://developer.mozilla.org/en-US/docs/DOM/document.cookie

如果您在Incognito Mode或禁用了Cookie,则无法使用。

答案 3 :(得分:0)

当从localhost运行时,这对我有用,运行chrome 28.0.1472.0 canary:

<!DOCTYPE html>
<html>
<head>
  <title>localhost cookie</title>
</head>
<body>
  <script type="text/javascript">
    console.log(document.cookie);
    var myCookie = "mycookie=hellocookie";
    document.cookie = myCookie;
  </script>
</body>
</html>

在服务器中运行它,访问页面并查看您的cookie商店,刷新页面并查看您的控制台。

在作为文件打开时没有设置cookie,但每次从服务器打开时都会工作。

答案 4 :(得分:0)

您可能为cookie设置了错误的路径。

就我而言,我将cookie中的path设置为/foo,因为该应用程序通常位于地址http://example.org/foo上。 但是,在测试期间,我在默认地址http://localhost:3000上打开了应用程序,这使我可以创建路径为/foo的cookie,但无法读取它们。 解决方案是在地址http://localhost:3000/foo上测试应用程序。