Symfony 2在注销时不会删除记住我的cookie


Symfony 2 does not delete remember-me cookie when logout

我的目标是以编程方式从控制器注销。我使用这个不错的解决方案。除了未删除LONGSESS(已重命名为REMEMBERME)cookie之外,一切都很好。它删除了但没有:)

退出控制器代码:

$response = $this->redirectToRoute('homepage');
$response->headers->clearCookie('LONGSESS');
return $response;

所以,请采取行动。

  1. 此操作的请求标头(如预期):

    Cookie SESS=n4jbl1m61l6bceesbeusrbq044; LONGSESS=QXBwQnVuZGxlXEVudGl0eVxVc2VyOmRYTmxja0IxYzJWeUxtTnZiUT09OjE0NDgyMDMyMjQ6ZTFhNzBlNGEyMWM4NGM3N2UzYmI3ZmJiNWIzMGM5MDg2ZDAyOWY1ZGVhMWI4NTYyNGQ0OTJmNjVmNmRjOTY2NQ%3D%3D
    
  2. 对此操作的响应标头(如预期):

    Set-Cookie:SESS=ai1gt79r49o184du3tknv7tdf6; path=/; domain=.myhost.local
    Set-Cookie:LONGSESS=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; httponly
    Set-Cookie:SESS=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; httponly
    
  3. 重定向标头(如预期):

    Location:/app_dev.php/
    
  4. 主页的下一个请求标头(与预期不同-LONGSESS值与上一个请求相同):

    Cookie:LONGSESS=QXBwQnVuZGxlXEVudGl0eVxVc2VyOmRYTmxja0IxYzJWeUxtTnZiUT09OjE0NDgyMDMyMjQ6ZTFhNzBlNGEyMWM4NGM3N2UzYmI3ZmJiNWIzMGM5MDg2ZDAyOWY1ZGVhMWI4NTYyNGQ0OTJmNjVmNmRjOTY2NQ%3D%3D; SESS=ai1gt79r49o184du3tknv7tdf6
    

所以用户并没有注销。

可能是什么情况?LONGSESS cookie设置为deleted,已过期,但下一个请求的值相同?

解决方案是在clearCookie方法调用中设置第三个参数domain。它必须等于会话设置中的域:

framework:
    session:
        cookie_domain: YOUR-DOMAIN.COM

firewalls:
    your_firewall:
            remember_me:
                domain: YOUR-DOMAIN.COM

所以,正确的方法:

$response->headers->clearCookie('LONGSESS', '/', 'YOUR-DOMAIN.COM');

您尝试过吗:

$response->sendHeaders();

紧随其后:

$response->headers->clearCookie('LONGSESS');