2012-08-09 32 views
4

我似乎無法在Google Chrome瀏覽器中設置使用壽命短的Cookie。他們要麼沒有設置,要麼立即被刪除(無法分辨哪個,儘管結果是相同的)。只有在將來有效期爲4小時或更短時纔會發生這種情況。如果過期時間大於4小時,則相同的代碼可以正常工作,並且問題在Firefox或Safari中不會發生。這裏有一個例子:Chrome不允許過期時間少於4小時的Cookie

不起作用:

exp = new Date(); 
exp.setMinutes(exp.getMinutes() + 240); 
document.cookie="name=value;expires=" + exp + ";path=/"; 

作品:

exp = new Date(); 
exp.setMinutes(exp.getMinutes() + 241); 
document.cookie="name=value;expires=" + exp + ";path=/"; 

是否有人在如何解決這個有什麼建議?

回答

3

事實上,我參照餅乾這裏http://code.google.com/p/chromium/source/search?q=document.cookie+expire&origq=document.cookie+expire&btnG=Search+Trunk檢出鉻源和他們叫所有的過期=陳述或者發現.toGMTString()或.toUTCString()上的日期所以它可能是一個奇怪的日期格式化函數,當它無意中將其轉換爲格式而不是明確地設置一個格式時,就會搞砸了。

,而不是這樣的:

document.cookie="name=value;expires=" + exp + ";path=/"; 

試試這個:

document.cookie="name=value;expires=" + exp.toUTCString() + ";path=/"; 
+1

看起來你是對的。我猜Chrome認爲未轉換的到期時間是格林威治標準時間(即使他們明確表示不是)。 Firefox和Safari必須不會出現此錯誤。 – Skunkwaffle 2012-08-09 19:04:22

+0

@Skunkwaffle Upvoted你的評論,因爲你也是正確的!偉大的頭腦....大聲笑 – bUKaneer 2012-08-09 19:08:18

+0

這就是爲什麼我喜歡這個地方。 – Skunkwaffle 2012-08-09 19:29:35

1

好像使用jQuery.cookie爲我工作:

Command: exp = new Date() 
Output: Thu Aug 09 2012 11:39:21 GMT-0700 (Pacific Daylight Time) 

Command: exp.setMinutes(exp.getMinutes() + 240) 
Output: 1344551961739 

Command: $.cookie('testCookie', 'test', {path: '/', expires: exp}); 
Output: "testCookie=test; expires=Thu, 09 Aug 2012 22:39:21 GMT; path=/" 

這是在Chrome的控制檯做了窗戶。

注意:格林威治標準時間22:39是格林威治標準時間-0700 15:39,因此是4小時到期。

編輯:我直接測試了你的代碼,它似乎並不接受cookie被設置爲在4小時內過期。這不使用jQuery:

exp = new Date(); 
exp.setMinutes(exp.getMinutes() + 240); 
document.cookie="testCookie2=test;expires=" + exp.toUTCString() + ";path=/"; 
+0

有道理,但我寧願不包括額外模塊的什麼在一行相當於一個問題開銷的代碼。 – Skunkwaffle 2012-08-09 18:48:08

+0

請參閱我的編輯以獲得較少開銷的答案。 – 2012-08-09 18:52:47

+0

我同意看到我的答案的解釋。 – bUKaneer 2012-08-09 19:00:26