Почему сеанс не очищается в незащищенной области Symfony?

Я реализовал компонент безопасности Symfony следующим образом:

$app['security.firewalls'] = array(
    'unsecured_area' => array(
        pattern' => new RequestMatcher('^/log(in|out).*', null, 'GET')
     )
     , 'secured_area' => array(
        'pattern' => '.*',
        'edir' => true,
        'users' => $app['security.user_provider.custom'],
        'switch_user' => array('parameter' => '_switch_user', 'role' => 'ROLE_ALLOWED_TO_SWITCH')
    )
);

Когда я вызываю маршрут выхода из системы, я просто аннулирую сеанс.

Насколько я понимаю, контекст безопасности хранится в сеансе, этого должно быть достаточно для выхода из системы моего пользователя. Но он не вышел из системы.

Если я обновлю свой брандмауэр, помещая маршрут выхода в защищенную область, $session->invalidate() будет работать нормально, и пользователь выйдет из системы...

Почему не работает в неохраняемой зоне? Незащищенная область не означает зону без сеанса, не так ли?


person Fractaliste    schedule 20.01.2015    source источник
comment
Нет, сеанс PHP присутствует, даже если вы вышли из системы. Сначала прочтите http://symfony.com/doc/current/components/http_foundation/session_configuration.html w3schools.com/php/php_sessions.asp php.net/manual/en/book.session.php   -  person Jean    schedule 20.01.2015


Ответы (1)


Просто, но в небезопасной области Symfony2 использует то, что он называет AnonymousToken, даже несмотря на то, что активная сессия не заполнена учетными данными пользователя.

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

надеюсь, это поможет

person bluetazmanian    schedule 20.01.2015
comment
Хорошо, при выходе из системы AnomymousToken очищается, но не AuthenticatedToken, потому что URL-адрес выхода не находится в защищенной области. Мне просто нужно переместить путь выхода из системы в защищенную зону. - person Fractaliste; 03.03.2015