php - cookie 过期时间未设置为在每个浏览器关闭后销毁,但它不起作用
问题描述
我首先设置了一个 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()
:
如果设置为 0 或省略,cookie 将在会话结束时(浏览器关闭时)过期。
这称为“会话 cookie”,应在浏览器关闭时将其删除。
稍微研究一下,Chrome 和 Firefox 的行为似乎略有不同,具体取决于它们是否配置为在启动时记住打开的选项卡和窗口,这是设计使然。
您提到您正在使用 Chrome - 如果 Chrome 在启动时配置为“从上次中断的地方继续”,则在关闭选项卡并重新启动浏览器时可能不会删除会话 cookie。
当我选择“打开新标签页”时,我可以验证关闭浏览器时 cookie 是否被删除。
这与 Firefox 相同 -在 Mozilla 支持论坛上有一些附加信息,其中包含有关如何配置它的一些详细信息。
简而言之,您可能无法依靠 Chrome 或 Firefox 来保证删除会话 cookie。
推荐阅读
- java - 使用 Jython 在 Robot Framework 中使用自定义 Java 关键字/库
- ionic-framework - 实施者 OpenLayers 无离子
- r - 闪亮的服务器安装 CentOS 8.1 构建
- sql - 如何在 Presto SQL 中制作动态日期
- r - 无法卸载包 'htmltools' 版本 0.5.0
- javascript - 从 Chrome 扩展程序跟踪页面上的鼠标移动、键盘点击和鼠标点击
- javascript - 如何将上传的文件从 charset=iso-8859-1 转换为 charset=utf-8?
- mongodb - MongoDb中的WhiteList ecs任务IP地址
- r - R - 多元多元回归误差无限或缺失值
- c++ - 从 Windows 下的共享库中使用时忽略 imbue/facet