无法正确注销PHP

无法正确注销PHP,php,logout,Php,Logout,我可以登录并访问所有成员页面,但当我注销时,我仍然可以访问所有成员页面 我使用此代码注销: $_SESSION["admin_id"] = false; $_SESSION["username"] = null; redirect_to("login.php"); 此代码用于检查用户是否已登录 function logged_in() { return isset($_SESSION["admin_id"]); } function confirm_logged_in($page)

我可以登录并访问所有成员页面,但当我注销时,我仍然可以访问所有成员页面

我使用此代码注销:

$_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,并像登录一样访问它们。我使用了另一个webbrowser,这是不可能的,因此页面得到了正确的保护。或者我需要完全销毁cookie和会话吗?

代替:

$_SESSION["admin_id"] = false;
试试这个:

unset($_SESSION["admin_id"]);

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

以下是您注销时的操作

您正在
管理员id
设置为
false
(这在技术上是一个值)

然后检查
admin\u id
是否设置为set:

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

您可以检查
admin\u id
是否为空(处理
null
false
0

您可以扩展当前函数

function logged_in() {
    return isset($_SESSION["admin_id"] && $_SESSION["admin_id"] !== false);
}
可以将变量设置为null

$_SESSION['admin_id'] = null;
您可以完全销毁会话

session_destroy();

重定向到()
包含/做什么?您是否正在取消设置/销毁会话,并且会话是否已在使用会话的所有页面中启动?当变量的值为
false
时,它仍然存在,并且
isset()
返回
true
。重定向\u to只是重定向的功能,但我插入了一个函数以使其变短。您已经得到以下答案,问他们或者接受回答。
$_SESSION['admin_id'] = null;
session_destroy();