Версия: 6.x
burger close
Класс SessionManager

Подробное описание

Статический менеджер хранилищ PHP-сессии.

Сама сессия работает полностью нативно: открывается один раз за запрос и остаётся открытой до конца его выполнения, данные читаются и пишутся через стандартный $_SESSION - никакой буферизации или промежуточного API нет, существующий код полностью совместим. Единственная задача класса - выбрать и зарегистрировать нужный SessionHandlerInterface (файлы или БД), на основе ::$SESSION_HANDLER_TYPE.

Открытые статические члены

static start ()
 
static stop ()
 
static getHandler ()
 
static setHandler (Handler\HandlerInterface $handler)
 
static switchTo (string $type)
 
static getHandlers ()
 
static getHandlersTitles ()
 

Методы

static getHandler ( )
static

Возвращает текущий хендлер хранилища сессии. Если хендлер ещё не был создан или переопределён через setHandler()/switchTo(), создаёт его по значению ::$SESSION_HANDLER_TYPE.

Возвращает
Handler
static getHandlers ( )
static

Врзвращает список названий классов хранилищ сессий

Возвращает
array<string, class-string<Handler>> соответствие идентификатора типа хранилища (значение ::$SESSION_HANDLER_TYPE) классу хендлера. Единственное место в коде, которое знает об этом соответствии - в конфиге хранится только идентификатор, не имя класса
static getHandlersTitles ( )
static

Возвращает список названий хранилищ для сессии

Возвращает
array
static setHandler ( Handler\HandlerInterface  $handler)
static

Напрямую устанавливает хендлер хранилища сессии, минуя ::$SESSION_HANDLER_TYPE. Используется в тестах. Должен вызываться до start() - после того как сессия запущена, подменить её хендлер штатными средствами PHP уже нельзя.

Аргументы
Handler\HandlerInterface$handlerхендлер хранилища сессии
Возвращает
void
static start ( )
static

Запускает сессию: регистрирует хендлер хранилища (см. getHandler()), переносит ::$SESSION_TIME в session.gc_maxlifetime и вызывает session_start(). Идемпотентен - повторные вызовы в рамках одного запроса ничего не делают.

Если хранилище сконфигурировано как БД, а таблица сессий ещё не создана, выполняет однократную попытку восстановления: создаёт таблицу через switchTo() и повторяет session_start() ещё раз (см. switchTo()).

Возвращает
void
Исключения
DbExceptionесли session_start() завершился ошибкой БД, не связанной с отсутствием таблицы
static stop ( )
static

Закрывает сессию, освобождая блокировку хранилища раньше конца скрипта (session_write_close()). Полезно перед длительными операциями (например long-polling), которым сессия больше не нужна. Если сессия не была запущена, ничего не делает.

Возвращает
void
static switchTo ( string  $type)
static

Готовит и активирует переход на хранилище сессий указанного типа: при необходимости приводит структуру БД в соответствие (для типа 'mysql' создаёт/обновляет таблицу сессий через RS::dbUpdate()), переносит данные текущей сессии (если она запущена) из старого хранилища в новое - чтобы пользователь, инициировавший переключение, не потерял сессию - и регистрирует новый хендлер как текущий.

Неизвестный идентификатор типа безопасно трактуется как 'native'.

Аргументы
string$typeидентификатор типа хранилища сессий: 'native' или 'mysql'
Возвращает
void