2016-03-20 143 views
1

在Firefox和Safari中測試,我已經嘗試了以下兩行。每個都設置cookie,但是在我關閉(然後重新打開)瀏覽器之後,這兩種方法都不會使cookie過期。瀏覽器的cookie信息說「測試」設置爲過期,「在會話結束時」,但不會發生。通過js設置Cookie在瀏覽器關閉時失效不會過期

還有一些關於此的帖子(例如,When does a cookie with expiration time 'At end of session' expire?),但沒有任何幫助或關於通過JavaScript設置cookie,特別是像我這樣做。

//失敗瀏覽器關閉之後期滿

的document.cookie = 「測試= 1;期滿= 0;路徑= /」;

//失敗後瀏覽器關閉

的document.cookie =到期 「測試= 1;路徑= /」;

+0

這很有趣。也許這是由於一些內容安全設置的原因,例如,cookie最初設置在服務器響應頭中,並設置了「httpOnly」標誌。你的服務器是否發送set-cookie頭文件? – lxe

+0

@lxe它實際上是非常愚蠢的。我沒有意識到,當你在Mac上「關閉」瀏覽器時,仍然存在一個瀏覽器進程。你必須明確退出瀏覽器。一旦我做到了,cookie就不見了。 –

回答

0

expires標記想要獲取UTC-Datestring。你可以只用一些簡單的功能我寫道:

setCookie = function(attrib, value, exp_days) { 
    var dt = new Date(); 
    dt.setTime(dt.getTime() + (exp_days*86400000)); // Convert days to ms 
    document.cookie = attrib + "=" + value + "; expires=" + dt.toUTCString(); // add attrib=value to the cookie and set an expiration date 
} 

getCookie = function(attrib){ 
    var split_cookie = document.cookie.split("; "); 
    attrib+="="; 
    for(var i=0; i<split_cookie.length; i++) 
    if(~split_cookie[i].indexOf(attrib)) // if the attribute is somewhere in the cookie string 
    // im using an ugly bitflip operator here, it could as well be an if(...!=-1) 
     return split_cookie[i].substring(attrib.length + split_cookie[i].indexOf(attrib),split_cookie[i].length); 
    return ""; 
} 

removeCookie = function(attrib){ 
    setCookie(attrib, "", -1); 
} 

如果使用removeCookie()函數,當前頁面會被留下當ATTRIB的價值將被刪除。

+0

謝謝。可悲的是同樣的結果。如果我希望瀏覽器關閉時exp_days到期,那麼究竟應該設置什麼?我已經嘗試過0,1,-1並將它留空。至於removeCookie函數,我不想明確刪除任何東西。瀏覽器關閉時是否應該自動關閉「刪除」功能?有一件事 - 我現在看到,即使在關閉瀏覽器之後,它們仍然在運行一個進程。只有一次我殺死了那個進程,我才發現這些cookies終於過期了。所以,問題是 - 是否有瀏覽器設置導致會話/進程持續? –

+0

更新:打開的過程是因爲我在Mac上,在關閉瀏覽器後讓它們打開。所以,我唯一剩下的問題是:如果我希望在瀏覽器關閉時過期,應該設置exp_days到底是什麼?我注意到像31572500這樣的數字,但爲什麼?如果1表示它明天到期,那麼31572500是否應該從現在開始到31572500天,而不是在會話結束時到期? –

+0

Cookie的值爲false(「」)或達到expires的值時將被刪除。 removeCookie完成了這兩個操作,所以當重新加載頁面時cookie會消失(-1意味着昨天,所以它會被傳遞。我不確定爲什麼31572500有效,如果它不是溢出,它可能會導致無效日期)。 – Chemistree

0

我沒有意識到,當你在Mac上關閉瀏覽器時,瀏覽器進程仍然存在。你必須明確退出瀏覽器。一旦我做到了,cookie就不見了。

相關問題