PHP Авторизация: Личный кабинет с нуля (Урок 4)

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

Создание страницы авторизации

Создаем файл 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>';
}
?>

Теперь система авторизации и личный кабинет готовы.

Что будем искать? Например,программа