【问题标题】:Correct Unset Cookie method in PHP with MYSQL使用 MYSQL 在 PHP 中更正 Unset Cookie 方法
【发布时间】:2019-02-14 06:23:03
【问题描述】:

我正在使用以下代码设置 Cookie:(admin.php)

  if ($_POST['stayLoggedIn'] == '1') {
    setcookie("id", $row['id'], time() + 60*60*24*365);
  }
  header("Location: addtip.php");

我无法取消设置 cookie,我已经搜索了该网站,以下代码应该是正确的,但它不起作用;(admin.php)

  if (array_key_exists("logout", $_GET)) {
    unset($_SESSION);
    setcookie("id", "", time()-60*60);
    $_COOKIE["id"] = "";
  }

使用“loggedinpage”上的以下代码取消设置测试 cookie,如果 cookie 未设置(addtip.php),该代码将返回到管理员登录页面

session_start();
if (array_key_exists("id", $_COOKIE)) {
    $_SESSION['id'] = $_COOKIE['id'];
}
if (array_key_exists("id", $_SESSION)) {
    echo "<a href='admin.php?logout' class='btn btn-danger btn-logout'>Log Out</a>";
} else {
    header("Location: admin.php");
}

【问题讨论】:

  • 如何检查 cookie 是否未设置?
  • @JohnConde 更新了我的问题
  • 您刚刚添加到需要重定向才能访问的单独页面上的代码吗?直到下一个页面加载,cookie 才会真正取消设置。届时它将不再存在并且不会发送到服务器。
  • 附带说明,如果您想让 cookie 过期,请将日期设置为非常远的过去。它可以解决服务器和浏览器之间的时间问题。并使用strtotime() 来做,因为它比time()-60*60 更清晰。 setcookie("id", "", strtotime('-1 year'));
  • @JohnConde 我在问题的括号中添加了我正在使用的文件名

标签: php mysql


【解决方案1】:

问题是您没有正确清除$_COOKIE['id'] 值。您将其设置为空字符串。这个想法是正确的,但是您必须使用unset()$_COOKIE 数组中删除条目。如果您不这样做,if() 条件array_key_exists("id", $_COOKIE) 将导致true,即使其中没​​有任何可用值。并且将$_SESSION['id'] 设置为空字符串也会使以下if() 条件array_key_exists("id", $_SESSION) 也导致true。因此,您将获得注销链接。

if (array_key_exists("logout", $_GET)) {
    unset($_SESSION);
    setcookie("id", "", strtotime('-1 year')); // send a header to remove the cookie
    unset($_COOKIE["id"]); // remove the cookie for the remaining CURRENT http request
}

不确定unset($_SESSION); 是否正确,您可能想改用/附加使用session_destroy();

【讨论】:

  • 添加 session_destroy(); 为我解决了这个问题。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 2016-05-23
  • 2015-06-14
  • 2014-09-11
  • 1970-01-01
  • 2023-03-10
  • 2016-03-10
  • 1970-01-01
相关资源
最近更新 更多