Авторизация через сессию на PHP

Наша авторизация должна работать так: пользователь, который хочет авторизоваться на сайте, заходит на страницу login.php, вбивает правильные логин и пароль и далее ходит по страницам сайта уже будучи авторизованным.

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

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

Будем хранить пометку об авторизации в переменной сессии $_SESSION['auth'] - если там записано true, то пользователь авторизован, а если null - то не авторизован.

Давайте внесем соответствующую правку в наш код:

<?php session_start(); if (!empty($_POST['password']) and !empty($_POST['login'])) { $login = $_POST['login']; $password = $_POST['password']; $query = "SELECT * FROM users WHERE login='$login' AND password='$password'"; $result = mysqli_query($link, $query); $user = mysqli_fetch_assoc($result); if (!empty($user)) { $_SESSION['auth'] = true; } else { // неверно ввел логин или пароль } } ?>

Теперь на любой странице сайта мы можем проверить, авторизован пользователь или нет, вот таким образом:

<?php if (!empty($_SESSION['auth'])) { } ?>

Можно закрыть текст какой-нибудь страницы целиком для неавторизованного пользователя:

<?php if (!empty($_SESSION['auth'])): ?> <!DOCTYPE html> <html> <head> </head> <body> <p>текст только для авторизованного пользователя</p> </body> </html> <?php else: ?> <p>пожалуйста, авторизуйтесь</p> <?php endif; ?>

Можно закрыть только часть страницы:

<!DOCTYPE html> <html> <head> </head> <body> <p>текст для любого пользователя</p> <?php if (!empty($_SESSION['auth'])) { echo 'текст только для авторизованного пользователя'; } ?> <p>текст для любого пользователя</p> </body> </html>

Пусть на нашем сайте, кроме страницы login.php, есть еще и страницы 1.php, 2.php и 3.php. Сделайте так, чтобы к этим страницам мог получить доступ только авторизованный пользователь.

Пусть на нашем сайте есть еще и страница index.php. Сделайте так, чтобы часть этой страницы была открыта для всех пользователей, а часть - только для авторизованных.

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

Сделайте так, чтобы при заходе на любую страницу сайта, авторизованный пользователь видел свой логин, а не авторизованный - ссылку на страницу авторизации.

Логаут

Авторизованный пользователь должен возможность перестать быть авторизованным, то есть совершить выход из своего аккаунта. Для этого нужно сделать отдельную страницу и удалять на ней пометку об авторизации, примерно вот так:

<?php session_start(); $_SESSION['auth'] = null; ?>

Реализуйте страницу logout.php, зайдя на которую, пользователь перестанет быть авторизованным.

Модифицируйте предыдущую задачу так, чтобы страница logout.php после выполнения своего кода выполняла редирект на index.php. Покажите на этой странице сообщение о том, что пользователь перестал быть авторизованным.