【问题标题】:PHP Cookies Not Unsetting [Unusual Situation]PHP Cookies 没有解除 [异常情况]
【发布时间】:2015-10-20 19:10:00
【问题描述】:

我遇到了一些无法取消设置的 cookie 的问题。我查看了this question,但所有答案都没有奏效。

我总共有 13 个 cookie,我需要偶尔清除它们以进行测试。当我使用以下方法取消设置时:

setcookie("name", "", time() - 3600, '/');

这不寻常的是,使用具有不同名称的相同代码会取消设置 13 个 cookie 中的 10 个,而仍然设置 3 个...所有 cookie 都是同时创建的,我试图在同时。我检查了所有与我电脑上存储的内容匹配的 cookie 名称。

如上所述,我已经尝试了上面链接的帖子中的所有答案,但都没有奏效。 cookie 在同一目录中设置和取消设置,只是权限级别相同的不同文件。

有什么建议吗?

(不确定是否重要,但我在 Mac 上使用 Chrome)

示例: 在登录期间设置 cookie(我已将其简化为我需要的 4 个关键 cookie)

if($pass == 1) {
    setcookie('auth_code',$no_generator,$cookie_expire,'/');
    setcookie('username',$_POST['username'],$cookie_expire,'/');
    setcookie('admin',$admin,$cookie_expire,'/');
    setcookie('login_time',$date,$cookie_expire,'/');
    $_SESSION['logged_in'] = "true";
    header('Location: /logs.php');
}

取消设置 Cookie:

setcookie("admin", "", time() - 3600, '/');
setcookie("login_time", "", time() - 3600, '/');
setcookie("username", "", time() - 3600, '/');
setcookie("auth_code", "", time() - 3600, '/');

$cookie_expire 设置为:$cookie_expire = time() + (21*365*24*60*60);

【问题讨论】:

  • 你能创建一个MCVE吗?
  • 检查您的姓名拼写是否正确
  • 已编辑的问题和所有名称都经过双重检查,甚至使用了在线比较工具以防万一。
  • 另外,这里的所有代码都是直接从live文件中复制出来的,所以你可以看到名字的拼写匹配等等。
  • 这些是 cookie,将保持未设置?

标签: php cookies


【解决方案1】:

您的代码在我的本地主机中运行良好。 您是否尝试将 cookie 名称设置为数组?我为我的本地做了一些修改:

<?php
    $pass=$_GET['pass'];
    if($pass == 1) {
        $a='A';
        $cookie_expire = time() + (21*365*24*60*60);
    setcookie('coo[auth_code]',$a,$cookie_expire,'/');
    setcookie('coo[username]',$a,$cookie_expire,'/');
    setcookie('coo[admin]',$a,$cookie_expire,'/');
    setcookie('coo[login_time]',$a,$cookie_expire,'/');
    //$_SESSION['logged_in'] = "true";
    header('Location: ./log.php');
}

然后使用循环取消设置

foreach($_COOKIE['coo'] as $k=>$v){
    setcookie("coo[$k]", "", time() - 3600, '/');
}

以防万一,

Note from php.net

If the PHP directive register_globals is set to on then cookie values will also be made into variables. In our examples below,

$TestCookie 将存在。建议使用 $_COOKIE。

【讨论】:

  • 我愿意尝试这个,但我想了解更多它是如何工作的(我对开发比较陌生..)例如,将cookie名称设置为数组..是唯一的好处是它意味着删除所有cookies的一行?或者还有其他好处吗?另外,代码的第一行$pass=$_GET['pass'] - 我不确定这是在哪里设置的,或者它是如何工作的。你能解释一下吗?谢谢。
  • 关于数组,如果我们有很多 cookie 变量,它只是简化了。关于 $_GET['pass'] 和变量 $a,这只是我尝试使用您的代码而不是使用 $_POST 数据创建新表单的示例。
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 2013-11-08
  • 2011-06-15
  • 2011-08-25
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多