用 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