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 没有解除 [异常情况]的主要内容,如果未能解决你的问题,请参考以下文章