Урок 21: Сессии и куки в PHP

Сегодня на 21-ом уроке мы разберем одну из ключевых тем для создания динамических веб-приложений, это работу с сессиями и куки в PHP. Эти инструменты позволяют сохранять данные между запросами пользователя, что критически важно для авторизации, корзин покупок, персонализации и многого другого.

Что такое сессии?

Когда вы заходите на сайт, сервер не «помнит» вас между разными страницами. HTTP это протокол без состояния, но сессии решают эту проблему. Сессия это механизм, который сохраняет данные на сервере в течение времени активности пользователя. Каждой сессии присваивается уникальный идентификатор (Session ID), который хранится у клиента (обычно в куки) и отправляется обратно на сервер с каждым запросом.

Как создать сессию?

В PHP для работы с сессиями используется глобальный массив $_SESSION. Перед началом работы с ним нужно запустить сессию функцией session_start(). Этот код должен быть вызван до любого вывода данных в браузер (даже до тега <html>).

<?php
// Всегда запускаем сессию в начале скрипта
session_start();

// Записываем данные в сессию
$_SESSION['username'] = 'Maxim';
$_SESSION['visit_count'] = 1;

echo 'Сессия создана! Данные сохранены.';
?>

Чтение данных из сессии

Чтобы получить данные, просто обращайтесь к элементам массива $_SESSION:

<?php
session_start();

if (isset($_SESSION['username'])) {
    echo 'Привет, ' . $_SESSION['username'] . '! Вы посетили сайт ' . $_SESSION['visit_count'] . ' раз.';
} else {
    echo 'Сессия не найдена.';
}
?>

Уничтожение сессии

Чтобы завершить сессию и удалить все данные, используйте session_destroy(). Но учтите: эта функция не очищает массив $_SESSION сразу. Лучше сделать это вручную:

<?php
session_start();

// Удаляем все данные сессии
$_SESSION = array();

// Уничтожаем сессию
session_destroy();

echo 'Сессия удалена.';
?>

Что такое куки?

Куки (Cookies) это небольшие текстовые файлы, которые хранятся на компьютере пользователя. Они позволяют запоминать данные между сессиями (например, настройки сайта или логин для автоматической авторизации).

Создание куки

В PHP куки создаются функцией setcookie(). Ее параметры:

  • Имя куки
  • Значение
  • Время жизни (в Unix-формате)
  • Путь на сервере, где куки доступны
  • Домен
  • Безопасность (передача только по HTTPS)
  • HTTP-only (запрет доступа через JavaScript).

Пример:

<?php
// Куки сохраняется на 1 час (3600 секунд)
setcookie('user', 'Maxim', time() + 3600, '/');

echo 'Куки созданы!';
?>

Чтение куки

Данные кук хранятся в глобальном массиве $_COOKIE:

<?php
if (isset($_COOKIE['user'])) {
    echo 'Привет, ' . $_COOKIE['user'] . '!';
} else {
    echo 'Куки не найдены.';
}
?>

Удаление куки

Чтобы удалить куки, установите время жизни в прошлое:

<?php
setcookie('user', '', time() - 3600, '/');
echo 'Куки удалены.';
?>

Различия между сессиями и куками

Параметр Сессии Куки
Хранение данных На сервере На клиенте
Безопасность Выше (данные защищены) Ниже (можно подделать)
Время жизни До закрытия браузера Задается разработчиком
Объем данных Большой (до лимитов PHP) До 4 КБ на куки

Практические задачи

Задача 1: Счетчик посещений

Создайте счетчик, который показывает, сколько раз пользователь зашел на страницу. Используйте сессии.

<?php
session_start();

if (!isset($_SESSION['visit_count'])) {
    $_SESSION['visit_count'] = 1;
} else {
    $_SESSION['visit_count']++;
}

echo 'Вы посетили страницу ' . $_SESSION['visit_count'] . ' раз.';
?>

Задача 2: Запомнить выбор темы

Позвольте пользователю выбрать тему (светлая/темная) и сохраните выбор в куки.

<form method="POST">
    <select name="theme">
        <option value="light">Светлая</option>
        <option value="dark">Темная</option>
    </select>
    <button type="submit">Сохранить</button>
</form>

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $theme = $_POST['theme'];
    setcookie('theme', $theme, time() + 86400 * 30, '/'); // На 30 дней
    echo 'Тема сохранена!';
}
?>

Советы по безопасности

  1. Не храните конфиденциальные данные в куках (пароли, токены).
  2. Для сессий используйте session_regenerate_id(true) для защиты от перехвата.
  3. Устанавливайте куки с флагом HttpOnly, чтобы защититься от XSS-атак.

Теперь вы умеете работать с сессиями и куками, это основа для создания интерактивных веб-приложений. Попрактикуйтесь на задачах и закрепляйте знания. Если хотите глубже изучить PHP, переходите к полному курсу по PHP для начинающих. Удачи в обучении.