Spec-Zone.ru › Symfony 3.2

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 не 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.2/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.html

Spec-Zone.ru

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