Вход в PHP: лучший способ показать различное содержимое между вошедшими в систему и незарегистрированными пользователями

Я изучаю PHP и разрабатываю довольно простой веб-сайт с аутентификацией. Поскольку я не думаю, что я достаточно хорош, чтобы сделать безопасную систему аутентификации (и в любом случае у меня не так много времени), я искал и нашел этот скрипт http://php-login.net/, который работает отлично. Я использую «2-расширенную» версию скрипта, и в файле index.php есть что-то вроде этого:

<?php
// load php-login components
require_once("php-login.php");

// create a login object. when this object is created, it will do all login/logout stuff automatically
// so this single line handles the entire login process.
$login = new Login();

// ... ask if we are logged in here:
if ($login->isUserLoggedIn() == true) {

    include("views/logged_in.php");

} else {

    include("views/not_logged_in.php");
}

Поэтому, если пользователь вошел в систему, он показывает содержимое logged_in.php или not_logged_in.php, если он этого не делает (в каталоге представлений есть .htaccess, который предотвращает прямой доступ к представлениям). Так же работают и другие страницы (Например, Registration.php в корневом каталоге есть файл views/registration.php, в котором находится содержимое).

Итак, вот мой вопрос: удобнее ли сделать это так или (хотя бы для индекса) сделать только одно представление и управлять отдельными элементами с чем-то вроде этого

if ($login->isUserLoggedIn() == true) { echo "you are logged in"
} else {echo "login form" }

для каждого элемента, где это необходимо? Я думаю, что для клиента это будет в основном то же самое, но на стороне сервера я не знаю, и, поскольку я новичок, я хотел спросить. Извините за мой английский, но я надеюсь, что вы поняли.

P.S.: Я не понял, могу ли я задать вопрос «Как лучше всего» на SO, и мне жаль, если я не смог, в следующий раз я не буду.


person Lorenzo Rossi    schedule 22.10.2013    source источник


Ответы (1)


Мой предпочтительный метод - аутентифицировать пользователя (хотя я хочу, обычно с помощью хешированного пароля в базе данных), а затем использовать сеансы для отслеживания статуса входа. Затем я могу установить переменную, например $_SESSION['loggedIn'] = true;, а затем проверить ее при последующих вызовах моего сценария.

E.g.

if(isset($_SESSION['loggedIn'] && $_SESSION['loggedIn'] == true)) {
    //Redirect to welcome page
} else {
    //Redirect to other page for users that are not logged in
}

Если пользователь щелкает ссылку для выхода из системы, я могу просто снять флажок.

unset($_SESSION['loggedIn']);

В основном, в зависимости от ваших потребностей, включая безопасность, может быть несколько разных способов сделать это. Опять же, для меня я аутентифицирую пользователя с помощью хешированного пароля, хранящегося в базе данных, а затем отслеживаю статус входа пользователя с помощью переменной сеанса.

Если то, что у вас есть прямо сейчас, кажется вам удобным и отвечает вашим потребностям, значит, вы готовы к работе.

person Crackertastic    schedule 22.10.2013
comment
Спасибо за ответ. Я думаю, что то, что вы сказали, в основном то же самое, что и использование этой функции, потому что в классе входа в систему функция isUserLoggedIn() использует сеанс php с флагом $_SESSION['logged_in']. Я предпочитаю использовать класс, потому что для меня это проще, и он делает много других вещей, таких как хеширование паролей, соединения с базой данных и файлы cookie «запомнить меня». Я думаю, что буду использовать версию include(), потому что она делает вещи чище и организованнее. - person Lorenzo Rossi; 22.10.2013