cookie方法

kmynzznz  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(300)

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

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

我不能让cookie取消设置,我已经搜索了网站,下面的代码应该是正确的,但它不工作(管理.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");
}
hgqdbh6s

hgqdbh6s1#

问题是你没有清除 $_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(); 相反/另外。

相关问题