无法正确注销PHP

Can not log out correctly PHP

我可以登录并访问所有会员页面,但是当我退出时,我仍然可以访问所有会员页面

我使用此代码注销:

$_SESSION["admin_id"] = false;
$_SESSION["username"] = null;
redirect_to("login.php");

此代码用于检查用户是否已登录,

function logged_in() {
    return isset($_SESSION["admin_id"]);
}

function confirm_logged_in($page) {
    if (!logged_in()) {
        redirect_to($page);
    }
}

他在我使用注销代码后重定向我。但我仍然可以输入会员页面 URL 并像登录一样访问它们。我使用其他网络浏览器这是不可能的,因此页面受到正确保护。还是需要彻底销毁cookie和session?

代替:

$_SESSION["admin_id"] = false;

试试这个:

unset($_SESSION["admin_id"]);

如果您确实需要注销,我认为您最好的选择是使用简单的 session_destroy() 使会话无效。 通过这样做,您可以毫无问题地使用 isset() 函数检查 $_SESSION,因为属于旧会话的每个参数都已取消设置。

这是您注销时正在做的事情。

您正在 admin_id 设置为 false(这在技术上是一个值)。

$_SESSION["admin_id"] = false;

然后检查 admin_id 是否 set:

isset($_SESSION['admin_id');  // returns TRUE because it "IS SET" to false

选项

您可以检查 admin_id 是否不为空(处理 nullfalse0)。

function logged_in() {
    return ! empty($_SESSION["admin_id"]);
}

您可以扩展当前的功能。

function logged_in() {
    return isset($_SESSION["admin_id"] && $_SESSION["admin_id"] !== false);
}

您可以将变量设置为空。

$_SESSION['admin_id'] = null;

您可以完全销毁会话。

session_destroy();