57

我在客户端 javascript 设置 cookie 方面遇到了这个真正奇怪的问题。我目前正在开发一个小 1 页演示,以使用 cookie 来存储一些“首选项”。请注意,我不能为此演示或任何 3rd 方 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。

4

6 回答 6

100

无法从 Javascript 访问 HttpOnly cookie,会话 cookie 通常设置为 HttpOnly cookie。另请参阅此 StackOverflow 问题: 如何使用 JavaScript 读取安全 cookie

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

于 2013-08-15T11:40:44.203 回答
59

如果 cookie 不在 Web 服务器中运行,则无法通过外观设置 cookie。

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

然而:

http://localhost/demo/demo.html作品。

于 2013-04-10T01:26:33.563 回答
1

当从本地主机运行 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,但每次从服务器打开时都有效。

于 2013-08-22T11:10:48.357 回答
0

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

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

如果您处于隐身模式或禁用了 cookie,它将无法工作。

于 2013-04-10T00:15:43.300 回答
0

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

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

于 2020-09-23T11:35:12.123 回答
-1
  1. 如果您直接打开文件,cookie 将不起作用,比如说 index.html

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

  2. 但是:如果使用轻量级服务器或本地服务器打开页面 (index.html),cookie 将起作用

    http://localhost/demo/demo.html 有效。或 http://127.0.0.1:5500/temp6.html

  3. 对于 VS Code 中的实时服务器,您可以使用 Ritwick Dey 的 Live Serve 在此处输入图像描述

于 2021-09-08T23:00:36.463 回答