PHP Cookies 没有解除 [异常情况]

Posted

技术标签:

【中文标题】PHP Cookies 没有解除 [异常情况]【英文标题】:PHP Cookies Not Unsetting [Unusual Situation] 【发布时间】: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,将保持未设置? 【参考方案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 数据创建新表单的示例。

以上是关于PHP Cookies 没有解除 [异常情况]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不必创建变量的情况下捕获异常?

系统的一个异常SQL的处理

微信接口异常怎么解除

PHP异常处理机制

拦截 GWT RPC 的异步代理服务异常

Java多线程 synchronized 抛出异常锁自动解除