2013-08-30 3 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 
} 
Смежные вопросы