2009-08-12 130 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

相关问题