SaveSessionListener
class SaveSessionListener implements EventSubscriberInterface
Сохраняет сессию, если она всё ещё открыта, перед отправкой ответа/заголовков.
Это гарантирует несколько вещей в случае, если разработчик не сохранил сессию явно:
- Если используется обработчик сохранения сессии без блокировки, это гарантирует, что данные будут доступны при следующем запросе, например, после перенаправления. Автосохранение PHP в конце сценария через sessionregistershutdown выполняется после fastcgifinishrequest. Таким образом, в этом случае данные могут отсутствовать при следующем запросе, потому что они могут не сохраняться в момент обработки нового запроса.
- Обработчик сохранения с блокировкой (например, системный 'files') обходит проблемы с одновременным доступом, подобные описанным выше. Но сохраняя сессию перед длительными операциями в событии terminate, мы гарантируем, что сессия не будет заблокирована дольше, чем необходимо.
- При перегенерации идентификатора сессии в механизме сессий PHP не используется блокировка. См. https://bugs.php.net/bug.php?id=61470 для обсуждения. Поэтому в этом случае сессия должна быть сохранена перед отправкой заголовков с новым идентификатором сессии. В противном случае данные сессии могут снова потеряться для одновременных запросов с новым идентификатором. Одним из результатов может быть выход из системы после только что выполненного входа.
Этот обработчик должен выполняться как один из последних обработчиков, чтобы предыдущие обработчики могли продолжать работать с открытой сессией. Это предотвращает издержки на её перезапуск. Обработчики, выполняющиеся после закрытия сессии, могут по-прежнему работать с сессией обычным образом, потому что реализация сессии Symfony запускает сессию по требованию. Поэтому запись в неё после сохранения просто перезапустит её.
Methods
| onKernelResponse(FilterResponseEvent $event) | ||
| static array | getSubscribedEvents() Возвращает массив имён событий, на которые этот подписчик хочет подписаться. |
Details
onKernelResponse(FilterResponseEvent $event)
Parameters
| FilterResponseEvent | $event |
static array getSubscribedEvents()
Возвращает массив имён событий, на которые этот подписчик хочет подписаться.
Ключи массива — имена событий, а значение может быть:
- Имя метода для вызова (приоритет по умолчанию 0)
- Массив, состоящий из имени метода для вызова и приоритета
- Массив массивов, состоящий из имён методов для вызова и соответствующих приоритетов, или 0, если не задано
Например:
- array('eventName' => 'methodName')
- array('eventName' => array('methodName', $priority))
- array('eventName' => array(array('methodName1', $priority), array('methodName2')))
Return Value
| array | Имена событий для подписки |
© 2004–2017 Fabien Potencier
Licensed under the MIT License.
http://api.symfony.com/2.7/Symfony/Component/HttpKernel/EventListener/SaveSessionListener.html