Переменная $_SESSION

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Добро пожаловать в тренажёр по работе с суперглобальной переменной $_SESSION в PHP. Сессии — это механизм, который позволяет сохранять информацию о пользователе на сервере и использовать её на разных страницах сайта. В отличие от cookies, данные сессии хранятся на сервере, а клиенту передаётся только уникальный идентификатор.

В этом модуле ты научишься запускать сессию, записывать и читать данные из $_SESSION, проверять наличие переменных сессии, удалять отдельные элементы и полностью завершать сессию. Также разберёшься с типичными ошибками — например, что будет, если забыть вызвать session_start() или попытаться работать с сессией после её уничтожения.

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

Список тем

1. Запуск сессии и запись данных

id: 39033_task1

Перед работой с массивом $_SESSION необходимо инициализировать сессию. Заполните пропуски, чтобы код корректно запустил сессию и сохранил имя пользователя.

Заполните пропуски
<?php
input1S(); // Запускаем сессию
input2S['username'] = 'Ivan';
echo "Данные сохранены";
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Что выведет код без session_start?

id: 39033_task2

Посмотрите на код ниже. Сессия не была запущена перед обращением к $_SESSION. Что произойдёт при выполнении?

Выберите правильный вариант ответа
<?php
$_SESSION['test'] = 'Hello';
echo $_SESSION['test'];
?>
Сообщения
Проверить
Показать подсказку

3. Исправьте ошибку в коде сессии

id: 39033_task3

В коде допущена ошибка при работе с сессией. Найдите и исправьте проблемную строку, чтобы корректно вывести роль пользователя.

Найдите ошибку и исправьте
<?php
session_start();
$_SESSION['role'] = 'admin';
echo $_SESSION->role;
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Проверка существования переменной сессии

id: 39033_task4

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

Нужно правильно расставить в пропуски предложенные варианты
<?php
session_start();
$_SESSION['user_id'] = 42;

if (input1S(input2S)) {
    echo "Пользователь авторизован";
} else {
    echo "Гость";
}
?>
isset
empty
$_SESSION['user_id']
$_SESSION['username']
$_GET['user_id']
is_null
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Функции для работы с сессиями

id: 39033_task5

Сопоставьте функции для работы с сессиями с их описанием. Перетащите элементы правой колонки в правильном порядке.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
Запускает или возобновляет сессию
Уничтожает все данные сессии на сервере
Возвращает идентификатор текущей сессии
Удаляет конкретную переменную из сессии
session_id()
unset($_SESSION['key'])
session_destroy()
session_start()
Сообщения
Проверить
Показать подсказку

6. Счётчик в сессии

id: 39033_task6

Предположим, что пользователь зашёл на страницу уже третий раз, и в сессии сохранено значение visits равное 2. Что выведет код после выполнения?

Что должно получиться?
<?php
// Допустим, сессия уже запущена и $_SESSION['visits'] = 2
$_SESSION['visits']++;
echo $_SESSION['visits'];
?>
Сообщения
Проверить
Показать подсказку

7. Классификация: сессии vs cookies

id: 39033_task7

Распределите утверждения по категориям: что относится к сессиям ($_SESSION), а что к cookies ($_COOKIE).

Перетяните элементы в соответствующие блоки
$_SESSION (сессии)
$_COOKIE (куки)
Данные хранятся на сервере
Данные хранятся на клиенте
Можно установить срок жизни в несколько дней
По умолчанию удаляются при закрытии браузера
Пользователь может просмотреть содержимое
Подходит для хранения конфиденциальных данных
Сообщения
Проверить
Показать подсказку

8. Соберите код выхода из системы

id: 39033_task8

Соберите код, который корректно завершает сессию пользователя: очищает массив $_SESSION, уничтожает сессию на сервере и выводит сообщение "Выход выполнен". Лишние строки не используйте.

Перетяните в правильном порядке строки из одного блока в другой
session_destroy();
<?php
echo "Выход выполнен";
$_SESSION = [];
?>
session_start();
unset($_SESSION);
session_abort();
session_reset();
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

9. Ошибка с заголовками

id: 39033_task9

Этот код выдаёт предупреждение "Cannot modify header information - headers already sent". Найдите и исправьте проблему.

Найдите ошибку и исправьте
<!DOCTYPE html>
<?php
session_start();
$_SESSION['name'] = 'Test';
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

10. Удаление элемента из сессии

id: 39033_task10

Заполните пропуски, чтобы код удалил из сессии только переменную 'temp_data', оставив остальные данные нетронутыми.

Заполните пропуски
<?php
session_start();
$_SESSION['user'] = 'Admin';
$_SESSION['temp_data'] = 'some cache';
$_SESSION['role'] = 'editor';

// Удаляем только temp_data
input1S(input2S);

// Проверяем, что user остался
echo $_SESSION['user'];
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

11. Сессия после destroy

id: 39033_task11

Что выведет этот код? Обратите внимание на порядок операций.

Выберите правильный вариант ответа
<?php
session_start();
$_SESSION['msg'] = 'Hello';
session_destroy();
echo $_SESSION['msg'];
?>
Сообщения
Проверить
Показать подсказку

12. Порядок действий при авторизации

id: 39033_task12

Расположите строки кода в правильном порядке для реализации простой авторизации: запуск сессии, проверка логина/пароля, запись ID пользователя в сессию, редирект.

Расставьте строки в правильном порядке
}
$_SESSION['user_id'] = 1;
session_start();
<?php
if ($_POST['login'] === 'admin' && $_POST['pass'] === '123') {
exit;
header('Location: dashboard.php');
Сообщения
Проверить
Показать подсказку

13. Значение по умолчанию

id: 39033_task13

Что выведет код? В сессии НЕТ переменной 'theme', используется оператор объединения с null.

Что должно получиться?
<?php
session_start();
// $_SESSION пуст
$theme = $_SESSION['theme'] ?? 'light';
echo $theme;
?>
Сообщения
Проверить
Показать подсказку

14. Регенерация ID сессии

id: 39033_task14

Для защиты от атаки фиксации сессии рекомендуется менять ID сессии после авторизации. Заполните код из банка токенов.

Нужно правильно расставить в пропуски предложенные варианты
<?php
session_start();

// Пользователь успешно авторизовался
$_SESSION['user_id'] = 42;

// Меняем ID сессии для безопасности
input1S(input2S);

echo "ID обновлён";
?>
session_regenerate_id
session_id
session_create_id
true
false
'new_id'
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

15. Счётчик посещений страницы

id: 39033_task15

Соберите полный код счётчика посещений: если переменная 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']--;
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

PHP: запуск кода в браузере

id: 39033_compiler
🐘
Запустить тренажёр (PHP)
НайтиКурс.Ру