Наша авторизация должна работать так: пользователь,
который хочет авторизоваться на сайте, заходит
на страницу 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
.
Покажите на этой странице сообщение о том,
что пользователь перестал быть авторизованным.