Где хранится сессия в PHP?

«Где хранится сессия в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PHP сессия по умолчанию хранится на сервере в виде файлов. Местоположение определяется директивой session.save_path в php.ini. Для распределённых систем или повышения производительности можно переопределить механизм хранения.

Стандартное хранение в файлах:

// Путь можно изменить динамически
ini_set('session.save_path', '/var/www/sessions');
session_start();
$_SESSION['user_id'] = 123;
// Файл сессии создаётся с именем вида sess_<session_id>

Использование Redis для сессий (часто в продакшене):

ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379?auth=secret&database=1');
session_start();

Кастомный обработчик для хранения в БД (например, MySQL):

session_set_save_handler(
    function ($savePath, $sessionName) { /* open */ return true; },
    function () { /* close */ return true; },
    function ($sessionId) { /* read */ return ''; },
    function ($sessionId, $data) { /* write */ return true; },
    function ($sessionId) { /* destroy */ return true; },
    function ($maxLifetime) { /* gc */ return true; }
);

Ключевые моменты:

  • Безопасность: Файлы сессий должны находиться вне публичной директории веб-сервера.
  • Производительность: Файловое хранилище становится узким местом при высокой нагрузке. Redis или Memcached решают эту проблему.
  • Распределённость: Для работы нескольких серверов приложений (например, за балансировщиком) необходимо общее хранилище сессий (Redis, БД).