Php 如何安全销毁cookie并处理时区?

Php 如何安全销毁cookie并处理时区?,php,cookies,Php,Cookies,我们删除了我们的cookies,如adviced on和on几个SO问题(): setcookie('id','',time()-3600,“/”,'',false,true) 如果我们分析此解决方案,当服务器和浏览器之间的时区差超过1小时时(旅行用户、不同时区、计算机时钟问题、操作系统时钟问题等),它看起来不起作用 因此,我们计划在过去进一步确定日期: setcookie('id','',time()-86400,“/”,'',false,true) 我们读到IE可以跳过过去日期过远的cook

我们删除了我们的cookies,如adviced on和on几个SO问题():

setcookie('id','',time()-3600,“/”,'',false,true)

如果我们分析此解决方案,当服务器和浏览器之间的时区差超过1小时时(旅行用户、不同时区、计算机时钟问题、操作系统时钟问题等),它看起来不起作用

因此,我们计划在过去进一步确定日期:

setcookie('id','',time()-86400,“/”,'',false,true)

我们读到IE可以跳过过去日期过远的cookies

建议使用哪个值

如果用户在计算机上的时间设置有问题(设置错误或电池电量耗尽)?(我们知道这是例外,但这些人最终总是抱怨我们的网站,并筹集支持票(这需要花钱)。)

注1:正如Theolodis所建议的,我们可以像这样链接cookie(修改):

这是一个涵盖所有案例的好主意吗


注2:我们正在寻找服务器端的解决方案(如果可能)。

我想@Theolodis'解决方案在大多数情况下都可以正常工作,但您仍然会遇到时区差异或计算机时钟问题

所以我想:如果每个用户的计算机中可能设置了不同的时钟/时区,那么最好使用他们的时间作为销毁cookie的默认参数

遗憾的是,服务器端脚本无法获取当前用户的时间,但您可以。是的,它会给你更多的工作,但我认为这几乎是完全失败的证明

您可以获取用户的时间并将其存储到
$\u SESSION['time']
中,如提供的示例所示。然后,您需要做的就是将cookie设置为在它“之前”一秒钟过期(我不计算AJAX请求引起的时间延迟)

还有,这里有一些有趣的阅读


我不确定这是有史以来最好的解决方案,但我希望它对您有效——或者至少为找到更好的解决方案铺平道路。

使用它可以处理时区。

您不能先设置86400 cookie,然后直接设置另一个cookie吗?在这种情况下,你唯一的问题就是IE用户,你需要另一种解决方案……不要使用相对时间来删除cookie。你依靠客户的时钟来“接近”你的时钟。使用过去固定的时间方式,例如时间0,即1970年1月1日。一个如此遥远的客户时钟应该遭受任何与时间相关的问题。好建议!另一种方法是使用
setcookie()
发送http头,并从javascript设置cookie。我的问题不太清楚,抱歉(我更新了):我们正在寻找一个只使用服务器的解决方案。但仍然是+1.)DateTime确实可以处理时区,但它无法解决问题。:)
setcookie('id', '', time() - 3600,  "/", "", false, true);
setcookie('id', '', time() - 90000, "/", "", false, true); #25 hours
setcookie('id', '', 1,              "/", "", false, true);
setcookie('id', '', strtotime($_SESSION['time']) - 1,  "/", "", false, true);