Spec-Zone.ru › Symfony 2.7

PdoSessionHandler

класс PdoSessionHandler реализует 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())

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

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, который затем будет использовать параметр ini session.save_path в качестве параметра DSN PDO.

Список доступных параметров: * 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/2.7/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.html

Spec-Zone.ru

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