Spec-Zone.ru › Symfony 3.0

PdoSessionHandler

class PdoSessionHandler implements SessionHandlerInterface

Обработчик сессий, использующий подключение PDO для чтения и записи данных.

Он работает с MySQL, PostgreSQL, Oracle, SQL Server и SQLite и реализует различные стратегии блокировки для обработки одновременного доступа к одной и той же сессии. Блокировка необходима для предотвращения потери данных из-за гонок и для поддержания согласованности данных сессии между read() и write(). При использовании блокировки запросы к одной и той же сессии будут ожидать, пока другая сессия не завершит запись. По этой причине лучшей практикой является как можно более раннее закрытие сессии для повышения конкурентности. Внутренний обработчик файлов сессий PHP также реализует блокировку.

Внимание: так как SQLite не поддерживает блокировки на уровне строк, но блокирует всю базу данных, это означает, что к одной сессии может обращаться только одна сессия. Даже разные сессии будут ждать завершения другой. Таким образом, сохранение сессии в SQLite следует рассматривать только для разработки или прототипов.

Данные сессии представляют собой двоичную строку, которая может содержать непропечатываемые символы, такие как нулевой байт. По этой причине они должны сохраняться в двоичном столбце в базе данных, таком как BLOB в MySQL. Сохранение их в символьных столбцах может привести к повреждению данных. Вы можете использовать createTable(), чтобы инициализировать правильно определённую таблицу.

Постоянные значения

LOCK_NONE

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

LOCK_ADVISORY

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

Этот режим недоступен для SQLite и ещё не реализован для oci и sqlsrv.

LOCK_TRANSACTIONAL

Создаёт реальную блокировку на уровне строк. Поскольку он использует транзакцию между открытием и закрытием сессии, вам необходимо быть осторожными, когда вы используете одно и то же подключение к базе данных, которое вы также используете для логики вашего приложения. Этот режим является по умолчанию, потому что это единственное надёжное решение для разных СУБД.

Методы

__construct(PDO|string|null $pdoOrDsn = null, array $options = array())

Конструктор.

createTable()

Создаёт таблицу для хранения сессий, которую можно вызвать один раз для настройки.

bool isSessionExpired()

Возвращает true, когда текущая сессия существует, но истекла согласно session.gc_maxlifetime.

open($savePath, $sessionName)

{@inheritdoc}

read($sessionId)

{@inheritdoc}

gc($maxlifetime)

{@inheritdoc}

destroy($sessionId)

{@inheritdoc}

write($sessionId, $data)

{@inheritdoc}

close()

{@inheritdoc}

Подробности

__construct(PDO|string|null $pdoOrDsn = null, array $options = array())

Конструктор.

Вы можете передать существующее подключение к базе данных как экземпляр PDO или передать строку DSN, которая будет использоваться для ленивого подключения к базе данных, когда сессия фактически используется. Кроме того, вы можете передать null, который затем будет использовать параметр DSN ini-настройки session.save_path.

Список доступных параметров: * dbtable: Название таблицы [по умолчанию: sessions] * dbidcol: Столбец, в котором хранится идентификатор сессии [по умолчанию: sessid] * dbdatacol: Столбец, в котором хранятся данные сессии [по умолчанию: sessdata] * dblifetimecol: Столбец, в котором хранится срок действия [по умолчанию: sesslifetime] * dbtimecol: Столбец, в котором хранится временная метка [по умолчанию: sesstime] * dbusername: Имя пользователя при ленивом подключении [по умолчанию: ''] * dbpassword: Пароль при ленивом подключении [по умолчанию: ''] * dbconnectionoptions: Массив параметров подключения, специфичных для драйвера [по умолчанию: array()] * lockmode: Стратегия блокировки, см. постоянные значения [по умолчанию: LOCK_TRANSACTIONAL]

Параметры

PDO|string|null $pdoOrDsn Экземпляр \PDO или строка DSN или null
array $options Ассоциативный массив параметров

Исключения

InvalidArgumentException Если режим ошибок PDO не PDO::ERRMODE_EXCEPTION

createTable()

Создаёт таблицу для хранения сессий, которую можно вызвать один раз для настройки.

Идентификатор сессии сохраняется в столбце максимальной длины 128, поскольку этого достаточно даже для функции хэширования сессии с конфигурацией 512 бит, такой как Whirlpool. Данные сессии сохраняются в BLOB. Можно также использовать более короткий встроенный столбец varbinary, если вы уверены, что данные поместятся в него.

Исключения

PDOException Если таблица уже существует
DomainException Если используется неподдерживаемый драйвер PDO

bool isSessionExpired()

Возвращает true, когда текущая сессия существует, но истекла согласно session.gc_maxlifetime.

Может использоваться для различения новой сессии и сессии, истекшей из-за бездействия.

Значение возврата

bool Истекла ли текущая сессия

open($savePath, $sessionName)

{@inheritdoc}

Параметры

$savePath
$sessionName

read($sessionId)

{@inheritdoc}

Параметры

$sessionId

gc($maxlifetime)

{@inheritdoc}

Параметры

$maxlifetime

destroy($sessionId)

{@inheritdoc}

Параметры

$sessionId

write($sessionId, $data)

{@inheritdoc}

Параметры

$sessionId
$data

close()

{@inheritdoc}

© 2004–2017 Fabien Potencier
Licensed under the MIT License.
http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API