2011-04-16 74 views
12

我在外部網站上,我試圖通過javascript刪除cookie。無法從javascript中刪除cookie

我沒有在控制檯中執行以下操作:

function deleteAllCookies() { 
    var cookies = document.cookie.split(";"); 

    for (var i = 0; i < cookies.length; i++) { 
     var cookie = cookies[i]; 
     var eqPos = cookie.indexOf("="); 
     var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; 
     document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; 
    } 
} 

deleteAllCookies() 

這應該設置文檔的cookie在1970年

但在那之後到期,我叫

document.cookie.split(";") 

的餅乾似乎沒有任何變化。任何想法爲什麼?

PS:上面的代碼是從計算器 Clearing all cookies with JavaScript

+1

只能刪除那些你從刪除它們的域的Cookie。您無法刪除跨域Cookie。 – 2011-04-16 18:08:41

+0

您是否在使用火蟲進行調試? document.cookie的價值是什麼? – 2011-04-16 18:15:00

+0

發佈您的cookie數據。它在這裏爲我工作:http://jsfiddle.net/WbGYV/1/ – Calum 2011-04-16 18:16:06

回答

16

我有同樣的問題。我發現cookie被設置在一個空的子域下,例如Cookie域名是「.domain.com」,我的網站是在「sub.domain.com」託管的。

要解決我加入了Cookie域設定值

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=.domain.com"; 

要查看域的cookie設置爲,在Chrome中,開放式開發工具 - >資源 - >餅乾,並期待在域名領域。

27

我剛碰到這個問題,最後解決了它。您的Cookie最有可能不會被刪除,因爲當您設置新值時,它必須與您嘗試刪除的原始cookie的路徑和域匹配。

換句話說:

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=[something];" 

那「東西」值需要與任何現有的cookie已設置排隊。

JS調試器可能不會告訴你路徑和域名的詳細信息,但如果你在你的Chrome->設置或類似位置查找現有cookie的值,它將變得很明顯哪一個你不匹配Firefox/Safari/IE中的面板。

讓我知道是否有幫助。

+1

我在IE中發現這個問題和Edge。最好總是設置路徑,因爲默認設置是設置cookie的頁面。因此,如果您嘗試在不同的頁面上過期,路徑將不匹配,並且不會過期。在IE和Edge中,它似乎隱藏了document.cookie值的過期時間和路徑,因此您無法通過查看該值來推導cookie的設置位置。如果需要,可以將設置頁面的路徑保存在cookie值中,以便稍後將其拉出。或者總是附加「; path = /;」到cookie的價值。那麼它將從任何頁面過期。 – 2016-02-28 08:01:42

+0

工程。最佳解決方案 – Sibidharan 2016-05-30 06:30:13

+0

節省了我的時間。謝謝 :) – 2016-11-13 13:31:57

0

我正在研究一個瀏覽器書籤從當前域中刪除cookie,我有同樣的問題,我的問題是我沒有使用域。這裏是我的書籤最終值。

javascript: (function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";domain=." + location.host.split('.').slice(-2).join(".") +";path=/"); }); })(); 

請注意,我替換 「domain.com」 與location.host.split( '')切片(-2)。加入( 「」),這樣我總是得到沒有子域名的域名,即mail.google.com將成爲google.com。設置cookie將到期時,我們應該忽略subdemain(至少在我的情況是這樣。

0

Clear session cookies in ie11?

可能是上面的鏈接可以給一個幫助

只要運行的JavaScript像下面

document.execCommand("ClearAuthenticationCache") 

我試過了,cookie被清除了。

0

我在嘗試刪除某些Cookie時遇到類似問題。有時,這種工作:

document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;';

...有時它沒有。

在查看Chrome Inspector(應用程序選項卡 - >存儲側欄 - > Cookies)後,我注意到一些Cookie設置了不同的域。例如:

.mydoamin.com 
sub.mydomain.com 

所以,我的解決方案是製作一個通用函數,從所有域中刪除cookie。

var deleteCookie = function(name) { 
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=.mydomain.com;'; 
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=sub.mydomain.com;'; 
};