2013-08-30 143 views
5

我一個網站和索引頁上的檢查工作,如果用戶登錄或不使用這段代碼:PHP檢查用戶登錄與功能

if (!$_SESSION['login'] && $_SESSION['login'] == "") { 
include_once($_SERVER['DOCUMENT_ROOT'] . "/login/"); 
} elseif ($_SESSION['login'] == 1) { 
include_once($_SERVER['DOCUMENT_ROOT'] . "/main/"); 
} 

但我想它看起來乾淨,然後我就開始想,如果有可能實現這樣的一個功能:

checklogin($_SESSION['login']); 

我沒有與功能太多的經驗,所以我很抱歉,如果我的問題看起來愚蠢的,所以謝謝提前。

+0

別擔心,您發佈的這兩個代碼段都是完全有效的。這取決於你如何構建你的代碼以及把邏輯放在哪裏。但它必須是*某處*。所以如果你只是想要這個函數(就像在第二個例子中那樣),前面例子中的邏輯必須在*函數內部。它不能只是消失。 您應該儘可能重新使用現有的身份驗證框架,因爲它確實很複雜。例如,看一下https://github.com/delight-im/PHP-Auth,它既是框架不可知的,也是與數據庫無關的。 – caw

回答

6

試試這個

if(check_login()) { 
    echo 'You are in!'; 
} else { 
    header('Location: login.php'); 
    exit; 
} 

function check_login() { 
    if(isset($_SESSION['login'] && $_SESSION['login'] != '') { 
     return true; 
    } else { 
     false; 
    } 
} 
3

只需使用empty

if (empty($_SESSION['login'])) { 
    include_once($_SERVER['DOCUMENT_ROOT'] . "/login/"); 
} else { 
    include_once($_SERVER['DOCUMENT_ROOT'] . "/main/"); 
} 

或者凝結成:

include_once $_SERVER['DOCUMENT_ROOT'].(empty($_SESSION['login']) ? "/login/" : "/main/"); 
2

有你所需要的:

function userCheck() 
{ 
    return (isSet($_SESSION['login']) && $_SESSION['login']); 
} 

if(userCheck()) 
    include_once($_SERVER['DOCUMENT_ROOT'] . "/main/"); 
else 
    include_once($_SERVER['DOCUMENT_ROOT'] . "/login/"); 
1

不顧你的方法是否有意義的事實,我認爲這會做你所期望的:

function checklogin($login){ 
     if (!$login && $login == "") { 
      include_once($_SERVER['DOCUMENT_ROOT'] . "/path/"); 
     } 
} 


// **** call to the function 

     checklogin($_SESSION['login']); 

// **** 
0

您可以使用此功能:

function checklogin() { 
    return (isset($_SESSION['login'])) ? true : false; 
} 

然後在頁面上要檢查用戶是否已登錄,您可以:

if(checklogin() === true){ 
    //here you would put what you want to do if the user is logged in 
} else { 
    //this would be executed if user isn't logged in 
    header('Location: protected.php'); 
    exit(); 
    //the above would redirect the user 
}