Есть ли обратный вызов Symfony по окончании сеанса? - PullRequest
2 голосов
/ 15 июня 2010

У меня есть приложение, которое проходит проверку подлинности на внешнем сервере в фильтре. В этом фильтре я пытаюсь установить пару атрибутов сеанса для пользователя с помощью метода setAttribute() Symfony:

$this->getContext()->getUser()->setAttribute( 'myAttribute', 'myValue' );

Я обнаружил, что, если я сброслю $_SESSION сразу после установки атрибута. С другой стороны, если я позвоню getAttribute( 'myAttribute' ), я получу именно то, что вставил.

Все это время я предполагал, что чтение / запись пользовательских атрибутов было синонимом чтения / записи в сеансе, но это неверное предположение. Есть ли проблема времени? Я не получаю никаких необъектных ошибок, поэтому кажется, что пользователь полностью инициализирован.

Где здесь отключение?

Спасибо.

UPDATE

Причина, по которой это происходило, заключается в том, что у меня был myUser::shutdown() код, который очищал кучу вещей. Поскольку myUser слабо эквивалентно $ _SESSION (по крайней мере, в отношении атрибутов), я предполагал, что метод shutdown() будет вызываться в конце каждого сеанса. Это не. Кажется, он вызывается при закрытии каждого запроса, поэтому мои атрибуты никогда не устанавливались.

Теперь, однако, меня интересует, есть ли обратный вызов для закрытия сеанса. Кто-нибудь знает?

1 Ответ

1 голос
/ 15 июня 2010

В зависимости от того, как вы выполняете сеанс, в классе хранения сеанса есть два метода, sessionGC (вызываемый при сборке мусора) и sessionDestroy.

Вы можете создать собственный класс сеанса, расширяющий любой используемый вами классВ настоящее время мы используем Doctrine / PDO.По умолчанию это sfSessionStorage.

Чтобы изменить класс, который вы используете, используйте edit factories.yml:

all:
  storage:
    class: mySuperNewSessionStorageClass
...