2015-05-20 89 views
0

我可以登录和访问所有成员的网页,但是当我退出,我仍然可以访问所有memberspages无法注销正确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和会话吗?

+0

'redirect_to()'包含/做什么?你是否设置/销毁会话,并使用会话在所有页面内启动会话? –

+6

当变量的值为false时,它仍然存在,并且isset()返回true。 – panther

+0

redirect_to只是重定向的功能,但我在其中加入了一个使其更短的函数 –

回答

0

以下是注销时的操作。

你是设置admin_idfalse(这在技术上是一个值)。

$_SESSION["admin_id"] = false; 

然后检查,看看admin_id是否集:

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(); 
0

在地方:

$_SESSION["admin_id"] = false; 

试试这个:

unset($_SESSION["admin_id"]); 
0

如果你真的需要注销,在我看来,最好的选择是到会话用一个简单的session_destroy无效( )。 通过这样做,您可以使用isset()函数检查$ _SESSION而不会出现问题,因为属于旧会话的每个参数都未设置。