2

我们删除了我们的 cookie,如php.net上的建议和几个 SO 问题(删除 cookie):

setcookie('id', '', time() - 3600, "/", "", false, true);

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

所以,我们计划在过去设定一个更远的日期:

setcookie('id', '', time() - 86400, "/", "", false, true);

我们已经读到 IE 可以跳过日期太远的 cookie。

推荐哪个值?

用户在计算机上的时间设置有问题(设置错误或时钟电池没电)怎么办?(我们知道这很不寻常,但这些人最终总是抱怨我们的网站并提出支持票(这需要花钱)。)

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

setcookie('id', '', time() - 3600,  "/", "", false, true);
setcookie('id', '', time() - 90000, "/", "", false, true); #25 hours
setcookie('id', '', 1,              "/", "", false, true);

涵盖所有情况是个好主意吗?

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

4

2 回答 2

1

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

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

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

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

setcookie('id', '', strtotime($_SESSION['time']) - 1,  "/", "", false, true);

此外,这里还有一些关于Internet Explorer Cookie 行为的有趣读物。

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

于 2013-10-01T20:18:12.180 回答
0

使用DateTime它可以处理时区。

于 2013-10-01T20:28:19.343 回答