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 и хранить пароли безопасно