【问题标题】:php cookie in firefox will not expireFirefox 中的 php cookie 不会过期
【发布时间】:2012-08-08 02:09:58
【问题描述】:

我有一个简单的登录设置,我使用 cookie 来存储登录 ID #,并使用此 ID,可以显示用户名和其他信息。

所以为了注销,我运行以下 php 脚本来注销:

<?php
if (isset($_COOKIE['id'])) {
setcookie("id","",1);
}
header("Location: redirectpage.html");
exit;
?>

这基本上会使 cookie 过期。但是,当我到达重定向页面时,它具有以下代码:

If (isset($_COOKIE['id'])) {
//display "You are logged in already"
} else {
// show login form
}

它说我仍然登录,移动到不同的页面仍然说我已经登录,并且显示 cookie 值给了我一个实际值,这意味着 cookie 没有过期。我一定是在这里遗漏了一些东西,但是为什么 cookie 没有过期?

注意:我将过期日期从 time()-60 或某个值更改为 1,但这并没有改变任何内容,并且删除 if 语句以在每次 php 代码运行时使 cookie 过期仍然没有执行把戏。

【问题讨论】:

  • 您不能直接删除 cookie。您在过去设置了过期日期并将其留给浏览器将其删除。看看这个:stackoverflow.com/questions/1267341/delete-cookie-from-browser
  • @ZombieHunter, setcookie 将 unix 时间戳作为第三个参数。值 1 过去。
  • 你的cookie中有什么?如果我在我的计算机中创建一个新的 cookie 并将其设置为id=1,我会自动登录到您的网站吗?第 1 课:永远永远信任用户提供的数据,包括 $_GET$_POST$_REQUEST$_COOKIE 以及 $_FILES$_SERVER['HTTP_*'] 的一些值
  • 卡洛斯,我的登录方式不是这样,id是11位数字,如果数字无效,它不会让你登录
  • ZombieHunter,你是对的,我的意思是过期,所以浏览器无法再访问该值。 1,根据我的研究,意味着它被设置为 1970 年开始后的一秒,过去的日期

标签: php session-cookies


【解决方案1】:

确保您尝试使用创建它时使用的相同参数来删除 cookie。来自 php 手册,http://gr2.php.net/setcookie,在“常见陷阱”下:

必须使用与设置相同的参数删除 Cookie 和。如果 value 参数是空字符串或 FALSE,并且所有 其他参数匹配之前对 setcookie 的调用,然后是 cookie 具有指定名称的将从远程客户端中删除。这个 通过将值设置为“已删除”和过期在内部实现 时间到过去一年。

【讨论】:

  • 不确定这是否是你的意思,但你的意思是如果我这样设置cookie:setcookie(name, value, expire, "/", ""), 我不能删除它如:setcookie(name, value, newexpire)?我实际上添加了最后两个参数,它起作用了!谢谢!
  • 没错,你必须有相同的参数。不要忘记通过单击“打勾”将适合您的答案标记为“已解决”
【解决方案2】:

尝试使用 if(!empty($_COOKIE... 因为 isset() 认为要设置空字符串。请参阅此表:http://docs.php.net/manual/en/types.comparisons.php

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多