php - cookie 过期时间未设置为在每个浏览器关闭后销毁,但它不起作用

标签 php cookies setcookie

我首先设置一个cookie,当我关闭浏览器时,cookie应该被销毁,所以我没有设置任何过期时间。但不知何故,即使关闭浏览器后,cookie 也不会被破坏。

<?php
session_start();
if(isset($_COOKIE['favcolor']))
{
   echo $_COOKIE['favcolor'];
}
else
{
   $_SESSION["favcolor"] = "green";
   setcookie('favcolor', 'green',0);
   echo 'new cookie and session are set';
}
?>

最佳答案

首先,您的代码看起来是正确的。正如 PHP 文档中所述 setcookie() :

If set to 0, or omitted, the cookie will expire at the end of the session (when the browser closes).

这称为“ session cookie”,浏览器关闭时应将其删除。

仔细研究一下,Chrome 和 Firefox 的行为似乎略有不同,具体取决于它们是否配置为在启动时记住打开的选项卡和窗口,这是设计使然。

您提到您正在使用 Chrome - 如果 Chrome 配置为在启动时“从上次停下的地方继续”,则当选项卡关闭并重新启动浏览器时, session Cookie 可能不会被删除。

enter image description here

当我选择“打开新标签页”时,我可以验证浏览器关闭时 cookie 是否被删除。

这与 Firefox 相同 - 还有一些附加信息,其中包含有关如何操作的详细信息 configure this在 Mozilla 支持论坛上。

简而言之,您似乎无法依赖 Chrome 或 Firefox 来保证删除 session cookie。

关于php - cookie 过期时间未设置为在每个浏览器关闭后销毁,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53013892/

相关文章:

javascript - 下拉列表中的默认值

Javascript - 如果 cookie 被禁用,我如何阻止我的网站?

javascript - 无法将 cookie 设置为超过一周后过期

javascript - PHP 中的 setcookie 仅适用于本地主机

php setcookie 在 php5 下失败

javascript - 动态更新从 AJAX 查询返回的 JSON 数组

php - Laravel 4 中的事务和事件

nginx - Xdebug 设置 cookie XDEBUG_SESSION 次数太多

php - CENTOS下如何开启TOMCAT 6对PHP的支持?

session - 创建登录流程的最佳实践?