symfony Удалить файл cookie «запомнить меня» при выходе из системы

В файле конфигурации безопасности есть delete_cookies: http://symfony.com/doc/current/reference/configuration/security.html

У меня включен remember_me. Все работает нормально, за исключением случаев, когда пользователь переходит по ссылке «выход из системы» (непосредственно из панели URL), я хочу, чтобы Symfony удалила файл cookie REMEMBERME. Как я могу этого добиться? Я что-то пропустил?

Когда я перехожу по URL-адресу /app/logout, я вижу инструменты разработчика Chrome, в которых у меня все еще есть файл cookie REMEMBERME.

Это мой файл security.yml:

firewalls:     
    app_secured:
        anonymous: ~
        switch_user: true
        pattern: ^(/$|/login$|/app/)
        form_login:
            login_path: login
            check_path: login_check
            csrf_provider: form.csrf_provider
            default_target_path: index
            always_use_default_target_path: true
        remember_me:
            key: "%secret%"
            lifetime: 2592000
            path: ~
            domain: ~
        logout:
            invalidate_session: true
            delete_cookies:
                REMEMBERME: { path: null, domain: null}
            path: logout
            target: login
access_control:
    - { path: ^/app/_sys/, roles: ROLE_NO_ACCESS }
    - { path: ^/app/, roles: ROLE_USER }
    - { path: ^/app/admin/, roles: ROLE_ADMIN }

Routing.yml

login:
    path:      /
    defaults:  { _controller: AppWebBundle:Login:login }
login_check:
    path: /login_check
logout:
    path: /app/logout

LoginController.php

/**
 * Login controller.
 * @Route("/")
 */
class LoginController extends Controller
{
    /**
     * Login page
     * @Route("/login", name="login2")
     */
    public function loginAction(Request $request){
        /** Reduced for simplicity, same code as: 
            http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form **/
        return $this->render('AppWebBundle:Default:login.html.twig', ['last_username' => $lastUsername,'error'=> $error,]);
    }
}

person Jonwd    schedule 12.11.2014    source источник


Ответы (2)


$response = new Response();
$response->headers->clearCookie('REMEMBERME');
$response->send();

Вы можете удалить файл cookie с помощью этого в контроллере

person neox    schedule 19.01.2015
comment
Правильно, но предпочитаю $response->sendHeaders(). - person SteeveDroz; 24.09.2015

Я обнаружил, что это не сработает, если вы поместите URL-адрес выхода непосредственно в адресную строку. Пользователь должен щелкнуть выход, чтобы работать.

Создание ссылки <a href="{{url('logout')}}">Logout</a> и нажатие на нее сработало.

person Jonwd    schedule 12.11.2014
comment
@JovanPerovic Я знаю, что это не так, но это помогло. Я предполагаю, что это как-то связано с тем, как работают HTTP и кэш? Я действительно не знаю. Я надеюсь, что кто-то может объяснить. - person Jonwd; 12.11.2014
comment
Вы уверены, что не просто пропустили app_dev.php? - person Ryall; 28.01.2015
comment
@ Райалл Нет. Все работало нормально, когда вы нажимали ссылку URL-адреса выхода вместо того, чтобы напрямую помещать ее в адресную строку браузера. Возможно, это была ошибка Chrome. - person Jonwd; 06.02.2015
comment
Это исправило это и для меня. Я думаю, разница в том, что я создавал href как /logout, тогда как на самом деле для работы ему нужно server.url/ выйти - person Adi; 05.01.2016