2013-04-10 135 views
21

我有这个客户端JavaScript设置cookie真正奇怪的问题。目前我正在开发一个小小的1页演示,以使用cookie来存储一些“偏好”。请注意,我不能在本演示或任何第三方jQuery插件中使用服务器端语言。Javascript document.cookie总是空字符串

所以我写了一个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控制台如何设置通过客户端的JavaScript一个cookie,看看我是否可以通过直接修改document.cookie

> document.cookie = "foo=bar"; 
"foo=bar" 
> document.cookie 
"" 

办呢?

编辑:我没有进入隐身模式,cookies已启用。

+0

另请参阅https://developer.mozilla.org/en-US/docs/DOM/document.cookie –

+0

有类似(但不是相同)的问题。我们可以读取和写入cookie,但不是全部。特别是会话cookie(JSESSIONID)不能被读取......看起来这是一个安全功能,但很难找到关于它的信息......任何人都知道这个? –

+2

@StijndeWitt:这是一个不同的问题,请自行提问,而不是增加赏金。顺便说一句,答案可能是['http-only' cookies](http://en.wikipedia.org/wiki/HTTP_cookie#HttpOnly_cookie) – Bergi

回答

35

如果没有在Web服务器中运行,您无法通过外观设置Cookie。

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

然而

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

+0

这让我知道了几次之后,我知道它。 –

+11

实际上cookies不能正常工作,你需要一个“有效的”域,即使它是IP,比如127.0.0.1或0.0.0.0。检查http:// stackoverflow。问题/ 1134290/cookies-on-localhost-with-explicit-domain/1188145#1188145 –

+0

你给我们留下了很多 –

35

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

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

+1

它令我感到困惑为什么“答案”有这么多upvotes,因为它是不可能设置HttpOnly JavaScript编写的cookie。 –

+0

标题:'Javascript document.cookie总是空串'。答:只有在设置了“HttpOnly”标记的cookie时才会发生。不,你不能*写这些来自JS的cookie,但是你可以*尝试*从JS读取cookie,它将返回...空字符串......即使你在HTTP头部和浏览器中看到cookie检查员,JS不会让你读它。 –

+0

我认为它得到了提升,因为:'1)'人们经常尝试阅读例如来自JS的会话cookie。 '2)'结果他们得到空字符串。 '3)'他们谷歌来到这里。 '4)'他们看到了这个答案并且补充了它,这正是发生了什么事情。 '5)'谢谢+1。 :) –

0

这为我工作从本地主机运行时,运行Chrome 28.0.1472.0金丝雀:在服务器

<!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,但每次从服务器打开时都工作。

相关问题