2015-05-20 88 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而不會出現問題,因爲屬於舊會話的每個參數都未設置。