2013-04-10 132 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,但每次從服務器打開時都工作。

相關問題