Spec-Zone.ru › Symfony 3.1

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, который затем будет использовать значение 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 error mode не равен PDO::ERRMODE_EXCEPTION

createTable()

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

Идентификатор сессии сохраняется в столбце максимальной длины 128, так как этого достаточно даже для функции session.hash_function с 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.1/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.html

Spec-Zone.ru

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