Добро пожаловать в тренажёр по работе с суперглобальной переменной $_SESSION в PHP. Сессии — это механизм, который позволяет сохранять информацию о пользователе на сервере и использовать её на разных страницах сайта. В отличие от cookies, данные сессии хранятся на сервере, а клиенту передаётся только уникальный идентификатор.
В этом модуле ты научишься запускать сессию, записывать и читать данные из $_SESSION, проверять наличие переменных сессии, удалять отдельные элементы и полностью завершать сессию. Также разберёшься с типичными ошибками — например, что будет, если забыть вызвать session_start() или попытаться работать с сессией после её уничтожения.
Задания идут от простого к сложному: сначала базовый синтаксис, потом проверки и условия, а в конце — комплексные сценарии вроде авторизации и счётчика посещений. Будь внимателен к порядку вызова функций — это частая причина багов при работе с сессиями.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Iterator интерфейс
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- IteratorAggregate интерфейс
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Функция htmlspecialchars().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
1. Запуск сессии и запись данных
Перед работой с массивом $_SESSION необходимо инициализировать сессию. Заполните пропуски, чтобы код корректно запустил сессию и сохранил имя пользователя.
<?php
input1S(); // Запускаем сессию
input2S['username'] = 'Ivan';
echo "Данные сохранены";
?>2. Что выведет код без session_start?
Посмотрите на код ниже. Сессия не была запущена перед обращением к $_SESSION. Что произойдёт при выполнении?
<?php
$_SESSION['test'] = 'Hello';
echo $_SESSION['test'];
?>3. Исправьте ошибку в коде сессии
В коде допущена ошибка при работе с сессией. Найдите и исправьте проблемную строку, чтобы корректно вывести роль пользователя.
<?phpsession_start();$_SESSION['role'] = 'admin';echo $_SESSION->role;?>4. Проверка существования переменной сессии
Заполните пропуски из банка токенов, чтобы код проверял наличие переменной в сессии и выводил соответствующее сообщение.
<?php
session_start();
$_SESSION['user_id'] = 42;
if (input1S(input2S)) {
echo "Пользователь авторизован";
} else {
echo "Гость";
}
?>5. Функции для работы с сессиями
Сопоставьте функции для работы с сессиями с их описанием. Перетащите элементы правой колонки в правильном порядке.
session_id()unset($_SESSION['key'])session_destroy()session_start()6. Счётчик в сессии
Предположим, что пользователь зашёл на страницу уже третий раз, и в сессии сохранено значение visits равное 2. Что выведет код после выполнения?
<?php
// Допустим, сессия уже запущена и $_SESSION['visits'] = 2
$_SESSION['visits']++;
echo $_SESSION['visits'];
?>7. Классификация: сессии vs cookies
Распределите утверждения по категориям: что относится к сессиям ($_SESSION), а что к cookies ($_COOKIE).
8. Соберите код выхода из системы
Соберите код, который корректно завершает сессию пользователя: очищает массив $_SESSION, уничтожает сессию на сервере и выводит сообщение "Выход выполнен". Лишние строки не используйте.
session_destroy();<?phpecho "Выход выполнен";$_SESSION = [];?>session_start();unset($_SESSION);session_abort();session_reset();9. Ошибка с заголовками
Этот код выдаёт предупреждение "Cannot modify header information - headers already sent". Найдите и исправьте проблему.
<!DOCTYPE html><?phpsession_start();$_SESSION['name'] = 'Test';?>10. Удаление элемента из сессии
Заполните пропуски, чтобы код удалил из сессии только переменную 'temp_data', оставив остальные данные нетронутыми.
<?php
session_start();
$_SESSION['user'] = 'Admin';
$_SESSION['temp_data'] = 'some cache';
$_SESSION['role'] = 'editor';
// Удаляем только temp_data
input1S(input2S);
// Проверяем, что user остался
echo $_SESSION['user'];
?>11. Сессия после destroy
Что выведет этот код? Обратите внимание на порядок операций.
<?php
session_start();
$_SESSION['msg'] = 'Hello';
session_destroy();
echo $_SESSION['msg'];
?>12. Порядок действий при авторизации
Расположите строки кода в правильном порядке для реализации простой авторизации: запуск сессии, проверка логина/пароля, запись ID пользователя в сессию, редирект.
}$_SESSION['user_id'] = 1;session_start();<?phpif ($_POST['login'] === 'admin' && $_POST['pass'] === '123') {exit;header('Location: dashboard.php');13. Значение по умолчанию
Что выведет код? В сессии НЕТ переменной 'theme', используется оператор объединения с null.
<?php
session_start();
// $_SESSION пуст
$theme = $_SESSION['theme'] ?? 'light';
echo $theme;
?>14. Регенерация ID сессии
Для защиты от атаки фиксации сессии рекомендуется менять ID сессии после авторизации. Заполните код из банка токенов.
<?php
session_start();
// Пользователь успешно авторизовался
$_SESSION['user_id'] = 42;
// Меняем ID сессии для безопасности
input1S(input2S);
echo "ID обновлён";
?>15. Счётчик посещений страницы
Соберите полный код счётчика посещений: если переменная visits не существует — установить в 1, иначе увеличить. В конце вывести "Посещений: N". Лишние строки не используйте.
} else {session_start();$_SESSION['visits']++;if (!isset($_SESSION['visits'])) {echo "Посещений: " . $_SESSION['visits'];<?php$_SESSION['visits'] = 1;}} else if {$_SESSION['visits'] = 0;$_SESSION['visits']--;?>