Этот урок посвящен реализации системы авторизации и добавлению личного кабинета, доступного только авторизованным пользователям.
Создание страницы авторизации
Создаем файл auth.php. В шапке файла добавляем ссылку на авторизацию:
<?php
// ...
?>
<a href="auth.php">Авторизация</a>
Копируем содержимое reg.php в auth.php, изменяем заголовок и форму:
<h2>Авторизация</h2>
<form action="auth.php" method="post">
<input type="text" name="login" placeholder="Логин">
<input type="password" name="password" placeholder="Пароль">
<button type="submit">Авторизоваться</button>
</form>
Удаляем лишние поля и изменяем текст кнопки.
Обработка формы авторизации и подключение к базе данных
Создаем auth_process.php для обработки формы. Получаем логин и пароль из $_POST:
<?php
$login = $_POST['login'];
$password = $_POST['password'];
include 'db.php'; // Подключение к базе данных
// ...
?>
Файл db.php содержит строку подключения к базе данных:
<?php
// Строка подключения к базе данных
?>
Этот файл подключается как к auth_process.php, так и к reg.php для единообразия и удобства изменения настроек.
Проверка данных пользователя и хеширование пароля
SQL-запрос для поиска пользователя:
SELECT id FROM users WHERE login = ? AND password = ?
Выполнение запроса с использованием подготовленных выражений:
$query = $pdo->prepare("SELECT id FROM users WHERE login = ? AND password = ?");
$query->execute([$login, $password]);
Проверка на наличие пользователя:
if ($query->rowCount() == 0) {
echo "Такого пользователя нет";
}
Перед проверкой пароль хешируется с использованием соли (такой же, как при регистрации):
$salt = 'ваш_секретный_ключ'; // Необходимо использовать тот же ключ, что и при регистрации
$passwordHash = hash('sha256', $password . $salt);
Сравнение происходит после хеширования.
Авторизация пользователя и установка cookies
При успешной авторизации устанавливаем cookie и перенаправляем на user.php:
setcookie('login', $login, time() + 24 * 30 * 3600, '/');
header('Location: user.php');
Cookie устанавливается на 30 дней и доступна для всех страниц.
Создание страницы личного кабинета и улучшение отображения ссылок
Создаем user.php:
<?php
echo 'Привет, ' . $_COOKIE['login'] . '!';
?>
В header.php добавляем условное отображение ссылок:
<?php
if (isset($_COOKIE['login'])) {
echo '<a href="user.php">Кабинет пользователя</a>';
} else {
echo '<a href="reg.php">Регистрация</a> <a href="auth.php">Авторизация</a>';
}
?>
Теперь система авторизации и личный кабинет готовы.