【问题标题】:Can't delete php set cookie无法删除 php 设置的 cookie
【发布时间】:2011-09-05 10:33:01
【问题描述】:

我在 php 中通过这个调用设置了一个 cookie

setcookie('alert_msg', 'you have the add badge');

我试过用这种方式取消设置

setcookie('alert_msg', '');
setcookie('alert_msg', false);
setcookie('alert_msg', false, 1);
setcookie('alert_msg', false, time()-3600);
setcookie('alert_msg', '', 1, '/');

它仍然不会取消设置 $_COOKIE['alert_msg'] 中的 cookie 值。

Firefox 和 Chrome 都试过了

代码示例:

if (isset($_COOKIE['alert_msg'])) {
    $this->set('alert_msg', $_COOKIE['alert_msg']);
    unset($_COOKIE['alert_msg']);
    setcookie('alert_msg', '', 1, '/');
}

【问题讨论】:

  • 检查 cookie 路径。您是否在dir/file 中设置cookie 并尝试在dir2/file 中取消设置?
  • @Shakti - 我正在使用 Cakephp。我将它设置在 /app/controllers 中的一个控制器中,并尝试在 /app 中的 app_controller 中取消设置,这有什么不同吗?
  • @Shakti - 我看你是对的,能否请您添加您的评论作为答案,我可以将其标记为我接受的答案。
  • cookie 名称中的点被替换为 _ 字符 - 这可能会导致一些问题
  • 您可能会发现 $cookie->delete() 很有帮助,如在 this standalone library 中找到的那样。

标签: php cookies


【解决方案1】:

检查 cookie 路径。

由于您没有将path 参数传递给setcookie 函数,在这种情况下,cookie 将只为当前目录设置,并且只能从该目录中使用和取消设置。

可能的解决方案是将path 值作为/ 传递。这样 cookie 就可以在应用程序的任何部分使用和取消设置。

【讨论】:

  • 坦克。你节省了我的时间
【解决方案2】:

2020 - 当我无法可靠地删除 cookie 时,Google 把我带到了这里。

有时,根据您的应用设计,您必须设置一些 cookie 详细信息(例如,路径不是 / )。仅当您可以清楚地识别该 cookie(您在其中设置的所有内容)以进行删除时,才能可靠地删除 cookie。

使用下面的代码进行可靠的删除;

$params = session_get_cookie_params();              // extract cookie details
unset( $_COOKIE[session_name()] );                  // unset the cookie
setcookie(session_name(), " " , 1 , 
          $params["path"], $params["domain"], 
          $params["secure"], $params["httponly"] ); // and also expire the cookie

注意 1:将过期时间设置为 1 秒后 unix 纪元时间。无需担心用户机器的时间设置是否正确。

注意 2:setcookie 最多接受 7 个参数,因此我们省略了 $params["lifetime"]。
其他参数是主要参数。

【讨论】:

    【解决方案3】:

    如果其他人对此有疑问:在我的特殊情况下,我无法删除 cookie,因为它是在网站的 https 版本中设置的,而我正在访问 http 版本。 始终重定向到 https!

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多