我对客户端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。
答案 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
上测试应用程序。