Сессии — как сайт запоминает пользователя
20 минПроблема: HTTP не запоминает
Когда вы открываете страницу сайта, происходит следующее:
- Браузер отправляет запрос на сервер
- Сервер обрабатывает запрос и возвращает страницу
- Соединение закрывается
При следующем запросе сервер не помнит, что это тот же пользователь! Каждый запрос — как новый посетитель.
Но как тогда сайты помнят, что вы вошли в аккаунт?
Решение: Сессии
Сессия — это способ хранить данные о пользователе между запросами.
Как это работает:
- При первом визите сервер создаёт уникальный идентификатор сессии (Session ID)
- Этот ID сохраняется в cookie браузера
- При каждом запросе браузер отправляет этот ID
- Сервер по ID находит данные сессии и "узнаёт" пользователя
┌─────────────┐ ┌─────────────┐
│ Браузер │ │ Сервер │
└──────┬──────┘ └──────┬──────┘
│ 1. Первый запрос │
│─────────────────────────────────→│
│ │ Создаёт сессию
│ │ ID: abc123
│ 2. Ответ + Cookie: abc123 │
│←─────────────────────────────────│
│ │
│ 3. Второй запрос + Cookie │
│─────────────────────────────────→│
│ │ Находит сессию abc123
│ 4. "Привет, Иван!" │
│←─────────────────────────────────│
Использование сессий в PHP
Запуск сессии
В начале каждого файла, где нужны сессии:
<?php
session_start();
?>
session_start() должен вызываться до любого вывода (до echo, до HTML, даже до пробелов и переносов строк перед <?php).
Запись данных в сессию
<?php
session_start();
// Сохраняем данные в сессию
$_SESSION["user_id"] = 1;
$_SESSION["username"] = "Иван";
$_SESSION["is_admin"] = false;
?>
Чтение данных из сессии
<?php
session_start();
// Проверяем, есть ли данные
if (isset($_SESSION["user_id"])) {
echo "Привет, " . $_SESSION["username"];
} else {
echo "Вы не авторизованы";
}
?>
Удаление данных из сессии
<?php
session_start();
// Удалить одно значение
unset($_SESSION["username"]);
// Удалить всё
$_SESSION = [];
// Полностью уничтожить сессию
session_destroy();
?>
Практика: счётчик посещений
Создайте файл public/counter.php:
<?php
session_start();
// Если счётчик не существует — создаём
if (!isset($_SESSION["visits"])) {
$_SESSION["visits"] = 0;
}
// Увеличиваем счётчик
$_SESSION["visits"]++;
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Счётчик посещений</title>
</head>
<body>
<h1>Счётчик посещений</h1>
<p>Вы посетили эту страницу <strong><?= $_SESSION["visits"] ?></strong> раз(а).</p>
<p><a href="counter.php">Обновить страницу</a></p>
<p><a href="counter.php?reset=1">Сбросить счётчик</a></p>
<?php
// Сброс счётчика
if (isset($_GET["reset"])) {
unset($_SESSION["visits"]);
header("Location: counter.php");
exit;
}
?>
</body>
</html>
Откройте http://localhost:8080/counter.php и понажимайте "Обновить". Счётчик увеличивается! Закройте браузер, откройте снова — счётчик помнит значение (пока сессия не истекла).
Добавляем session_start() в config.php
Чтобы не писать session_start() в каждом файле, добавим его в config.php:
В начало файла public/includes/config.php:
<?php
// Запускаем сессию
session_start();
// ... остальной код config.php
?>
Теперь сессия запускается автоматически при подключении config.php.
✅ Что такое сессии и как они работают
✅ Как использовать $_SESSION
✅ Как хранить данные между запросами
В следующем уроке создадим форму регистрации!
Материалы по теме
- Глоссарий digital-терминов Глоссарий
- Статьи блога по разработке и SEO Блог
- Практические чеклисты по внедрению Чеклисты
- Зеркало сайта Термин
- Конверсия сайта: как увеличить продажи Статья