04. Обработка форм, сессии и авторизация

Введение

Формы — это основной способ общения пользователя с сайтом. Благодаря ним можно отправлять данные на сервер: логин, пароли, комментарии, заказы и т.д.

Сессии позволяют «запомнить» пользователя между страницами: кто вошёл, какие у него настройки и т.д.

В этом уроке мы создадим мини-систему входа и выхода пользователя.

Формы + Сессии = основа любого динамического сайта с авторизацией.

Как работает форма

Форма HTML отправляет данные на сервер методом GET или POST.

GET — данные передаются в адресной строке (используется для поиска, фильтров). POST — данные передаются скрытно, чаще используется для авторизации или регистрации.

Пример простой формы


<!doctype html>
<html lang='ru'>
<head><meta charset='utf-8'><title>Пример формы</title></head>
<body>
  <form method='post'>
    <label>Введите имя:</label><br>
    <input type='text' name='name'>
    <button type='submit'>Отправить</button>
  </form>

<?php if (!empty($_POST['name'])) { echo '<p>Привет, ' . htmlspecialchars($_POST['name']) . '!</p>'; } ?> </body> </html>

Разбор

  • method='post' — отправляем данные скрытно
  • name='name' — имя поля, по которому PHP получит значение
  • $_POST['name'] — массив, в котором хранится введённое значение
  • htmlspecialchars() — защита от XSS (вредных скриптов)

GET и POST: различия

  • GET — данные видны в URL: ?search=php
  • POST — данные скрыты, не видны в адресе
  • Для авторизации и паролей используйте POST

Сессии в PHP

Когда пользователь входит в систему, PHP может «запомнить» его с помощью сессии.

Сессия хранит данные на сервере, а пользователю отправляется cookie с уникальным идентификатором.

Пример использования сессии


<?php
session_start(); // запускаем сессию

// сохраняем данные $_SESSION['user'] = 'admin';

// где-то на другой странице if (isset($_SESSION['user'])) { echo 'Вы вошли как: ' . $_SESSION['user']; } ?>

Зачем нужна session_start()

Функция session_start() должна быть в начале каждой страницы, где используется сессия, иначе PHP не сможет получить доступ к данным пользователя.

Удаление данных сессии


<?php
session_start();
session_unset(); // очищает данные
session_destroy(); // завершает сессию
?>

Мини-проект: авторизация пользователя

Создадим три файла:
  • login.php — форма входа
  • dashboard.php — личный кабинет
  • logout.php — выход из системы

login.php


<?php
session_start();

// Имитация пользователя из БД $user = 'admin'; $pass = '12345';

if (!empty($_POST['login']) && !empty($_POST['password'])) { if ($_POST['login'] === $user && $_POST['password'] === $pass) { $_SESSION['user'] = $user; header('Location: dashboard.php'); exit; } else { echo '<p style="color:red">Неверный логин или пароль</p>'; } } ?> <!doctype html> <html lang='ru'> <head><meta charset='utf-8'><title>Вход</title></head> <body> <h2>Авторизация</h2> <form method='post'> <label>Логин:</label><br> <input name='login'><br> <label>Пароль:</label><br> <input type='password' name='password'><br> <button type='submit'>Войти</button> </form> </body> </html>

dashboard.php


<?php
session_start();
if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit;
}
?>
<!doctype html>
<html lang='ru'>
<head><meta charset='utf-8'><title>Личный кабинет</title></head>
<body>
  <h2>Добро пожаловать, <?php echo htmlspecialchars($_SESSION['user']); ?>!</h2>
  <p>Вы успешно вошли в систему.</p>
  <a href='logout.php'>Выйти</a>
</body>
</html>

logout.php


<?php
session_start();
session_destroy();
header('Location: login.php');
exit;
?>

Защита и безопасность

Чтобы форма была безопасной, нужно помнить:
  • Используйте htmlspecialchars() при выводе данных
  • Пароли храните с помощью password_hash() и проверяйте через password_verify()
  • Добавляйте проверку token (CSRF-защиту) для критичных действий

Пример безопасной проверки пароля


<?php
$hash = password_hash('12345', PASSWORD_DEFAULT);
if (password_verify('12345', $hash)) {
  echo 'Пароль верный';
}
?>

Типичные ошибки новичков

  • Забыли session_start() — сессия не работает
  • Выводят пароли в браузере — недопустимо!
  • Не проверяют ввод на XSS — используйте htmlspecialchars()

Итоги урока

Вы узнали:
  • Как работают формы и как передаются данные через POST и GET
  • Как создавать и использовать сессии в PHP
  • Как сделать простую авторизацию с входом и выходом
  • Как защитить формы от XSS и хранить пароли безопасно