【问题标题】:Removing cookie not working in PHP删除 cookie 在 PHP 中不起作用
【发布时间】:2017-12-15 23:28:00
【问题描述】:

这有点奇怪,但我设置了一个 cookie:

setcookie('auth', 'ok', time() + 3600, "/");

结果:

Name:   auth
Content:    ok
Domain: --.com
Path:   /
Send for:   Any kind of connection
Accessible to script:   Yes
Created:    Tuesday, July 11, 2017 at 11:00:23 PM
Expires:    Wednesday, July 12, 2017 at 12:00:23 AM

它工作正常,但是当我想删除这个 cookie 时:

setcookie('auth', 'ok', time() - 3600, "/");
unset($_COOKIE['auth']);

结果没有变化,cookie没有被删除,我的浏览器里还是得到了这个cookie。

cookie 是在这个 URL 中创建的:

auth.php?action=confirm

并使用ajax调用函数:

模型/auth.php

它应该在这个 URL 中删除它:

auth.php?action=logout

但它不起作用。有什么想法吗?

【问题讨论】:

  • 擦除cookie时尝试将值设置为null,并将时间设置为-1,但过去的任何时间都可以。
  • 你试过setcookie("auth", "", time()-3600); 吗?定义空值
  • @JTC 是的,我也尝试过null,但无法正常工作,为空且为空.. 仍然有这个 cookie
  • @tilz0R 你的意思是setcookie('auth', null, time() - 1, "/"); ?还是不行
  • @JTC 不可能,因为之前阅读过这个主题。我确定domainpath 是一样的。

标签: php cookies


【解决方案1】:

删除 cookie 的一种干净方法是清除 $_COOKIE 值和浏览器 cookie 文件:

if (isset($_COOKIE['auth'])) {
  unset($_COOKIE['auth']);
  setcookie('auth', '', time() - 3600, '/'); // Empty value and old timestamp
}

【讨论】:

  • 它是否将浏览器cookie文件更改为null?
  • 没有任何改变。我插入这个 if (isset($_COOKIE['auth'])) { echo "ok";} 并打印 ok 我的意思是它检测到该 cookie 但无法删除或更改。
  • 我以前读过这个主题,已经读过一遍,没有任何改变。
【解决方案2】:

您很可能在销毁 cookie 之前输出了一些数据。

尝试检查这一点,在任何输出之前使用此代码:

setcookie("auth", "", time()-3600);

通过$sent = headers_sent($file, $line);,您可以查看在尝试销毁 cookie 之前是否已经输出了一些数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 2020-08-20
    • 2015-12-21
    • 1970-01-01
    • 2011-05-08
    • 2018-03-21
    • 2014-12-02
    • 2017-02-11
    相关资源
    最近更新 更多