2009-08-12 136 views
13

有沒有什麼方法可以完全指導網絡瀏覽器刪除用PHP設置的cookie?從瀏覽器中刪除cookie?

我不想屆滿它或等待瀏覽器爲已關閉

隨着刪除我的意思是實際上沒有把它列在cookie的列表裏面了。

+0

您可以「禮貌地要求」瀏覽器通過將其值設置爲空字符串或將過期時間設置爲過去的某個日期或使用$ cookie-> delete()從https中刪除cookie ://github.com/delight-im/PHP-Cookie – caw 2016-07-13 00:26:18

回答

9

你不能強迫瀏覽器刪除任何Cookie相關聯的文件,因爲你不能保證真正有這樣一個文件 - 關於餅乾的瀏覽器和Web服務器之間的合同數據將在合格的請求中呈現。

您聲明您「不想等待Cookie過期」,但是Cookie過期是指示數據不再需要的正確方法,不應在將來的請求中顯示,而在大多數情況下案例確實轉化爲瀏覽器刪除文件。

因此,要刪除一個cookie,將其到期時間設置爲過去。在PHP中,這是通過setcookie()完成的。

+0

這是最接近的答案(即第1段)。謝謝。 – 2009-09-22 13:00:25

5

是的。使用setcookie()並將您希望刪除的cookie的到期日期設置爲過去的時間。用戶的瀏覽器應該自動刪除它。

-1

我爲我寫了這個插件並正常工作。

(function($) { 
    $.cookieAllDelete = function(doc) 
    { 
     var cookie_date = new Date(); 
     var cookies = null; 

     cookies = doc.cookie.split(';'); 
     cookie_date.setTime(cookie_date.getTime() - 1); 

     for(var i=0; i < cookies.length; i++) 
     { 
      var cookie_name = cookies[i].split('=')[0]; 
      try { 
       if (cookie_name.length > 0) 
        doc.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString(); 
      } catch(ex) {} 
     } 
    } 
})(jQuery); 

jQuery.cookieAllDelete(document); 
+3

如果我關閉了JavaScript,它的工作效果如何? :-) – ceejayoz 2009-08-12 16:57:00

+0

對不起,我也在看標籤jQuery和我很困惑。感謝下來 – 2009-08-12 17:24:34

+1

下來不是從我。 – ceejayoz 2009-08-12 17:33:26

19

嘗試這樣的事情來刪除所有cookie:

foreach ($_COOKIE as $name => $value) { 
    setcookie($name, '', 1); 
} 

價值1到期值,它代表了一個後第二的開始Unix時間劃時代的。所以它總是已經過期。

+0

有人去掉了所有與過期有關的答案,因爲問題表示他們不想過期。 – 2009-09-22 14:28:56

+17

@ Chacha102:那麼,現在有人不知道餅乾如何工作。 – Gumbo 2009-09-22 14:45:08

+0

@Gumbo或者你可以在一個名爲'deleteAllCookies'的函數中即興創作幷包裝你的這個答案來僞造它。 :P – choz 2016-05-09 09:00:02

1

我認爲你必須使用相結合的辦法:在過去

  • 集過期回來的路上(由Chacha102的建議)
  • 使用JavaScriptto刪除了document.cookie DOM對象條目(所建議安德烈斯descalzo)

有與混合的方法去2個很好的理由:

  • 可以在瀏覽器中禁用JavaScript
  • 並非所有cookie都可以在document.cookie中看到某些現代瀏覽器支持cookies的httponly標誌。 PHP擁有的HttpOnly餅乾支持,請http://www.php.net/setcookie
3

'似乎刪除cookie比看起來更困難。

setcookie($name, '', 1); 

不會這樣做。 ''爲空,setcookie可以忽略整個指令。

而且設置時間過去,有時允許cookie來保持其到期時間較新,1

我處理這對現在的價值。我不知道它來自哪裏,但它在那裏。

我使出

setcookie($name, '0', 9000000000); 

這保證了cookie設置爲可解析爲假的值,它比以往的任何值更新。

如果有人對此行爲有任何瞭解,請告訴。

我懷疑困難在於這樣一個事實,即當值未指定時,setcookie的域和路徑值保證從執行到執行相同。

我知道這樣的cookie不會在2038年左右過期。

或者,如果cookie的最新到期日期是已知的,則需要僅在1秒之後設置。

+0

在我的情況下,setcookie不工作的原因是因爲我沒有對第四個參數使用相同的位置。因此,請確保您使用第4個參數的相同位置,以便成功刪除cookie – Antony 2012-03-22 23:19:13

+1

我發現您必須設置相同的參數來設置和刪除cookie。 Set Cookie:setcookie($ name,$ uid',$ time,'/','',0); - 刪除Cookie:setcookie($ name,$ uid',1,'/','.domain.name',0);將不起作用,第五個參數必須相同。 – Grant 2012-08-16 09:08:07

+0

打印$ _COOKIE數組,取消設置密鑰:unset($ _ COOKIE [$ name]); – ShivarajRH 2017-02-28 09:21:49