用 PHP 清除 Cookie 在 Safari 中的行为很奇怪

Posted

技术标签:

【中文标题】用 PHP 清除 Cookie 在 Safari 中的行为很奇怪【英文标题】:Clearing Cookie with PHP behaves strange in Safari 【发布时间】:2015-07-12 23:26:54 【问题描述】:

我在 php 中使用以下代码删除了一个 cookie:

setcookie('test', null, -1, '/');

它在所有浏览器中都运行良好,Safari 除外。如果处理得足够快,来自 Safari 的后续请求会将此 Cookie 发送到网络服务器。

我能想到的最简单的例子:

<?php

setcookie('test', null, -1, '/');
print_r( $_COOKIE );

?>

在浏览器中快速按 F5。有时您会看到已删除值的 cookie。平台似乎无关紧要。我在 iPhone、Safari (Windows) 和 Safari (Mac) 上得到了这个结果。对我来说,它看起来像一个 Safari 错误,但也许我在这里遗漏了什么?

我希望永远不要在后续请求中设置 cookie,无论多快。感谢您提供任何见解。

【问题讨论】:

我可能偶然发现了同样的问题。发生的情况是,我们的 Web 应用程序有时会收到 cookie 值被“删除”的请求(当您删除它时 PHP 将 cookie 设置为该值)。除了您提到的 Safari 之外,有时用户代理似乎是 Googlebot。 你有没有发现问题?我遇到了完全相同的情况。它只发生在我们的少数用户身上,但它始终发生在某些用户身上,几乎所有用户都在旧版本的 Safari 上。尚未能够在任何经过​​测试的 OSX 和 Safari 版本上在内部重现它。 【参考方案1】:

这个问题已经报告here。

通过设置路径的解决方法:

setcookie('testcookie', 'cookiesetting temporary', time()+3600, '/path/'); // set 
setcookie('testcookie', '', time()-3600, '/path/'); // delete

【讨论】:

我认为这是一个不同的问题。在我的示例中,cookie 已被删除,但不是立即删除。此外,我尝试将脚本移动到 /test/ 文件夹并相应地调整路径。还是同样的问题。【参考方案2】:

第四个参数的路径设置正确吗?

safari cookie issue

【讨论】:

我需要 cookie 对整个域有效,因此 / 作为路径。这有什么问题吗?只需在此处关注official reference。

以上是关于用 PHP 清除 Cookie 在 Safari 中的行为很奇怪的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中清除旧 SESSION_COOKIE_DOMAIN 的 cookie

用的express 4.x 想清楚cookie 发现有些清除不了 为什么

php,js清除cookie

$_COOKIE 在 Safari iOS 中不起作用

PHP 清除Cookie

cookie是啥文件?可以清理么?