注销时,Symfony 2不会删除remember-me cookie

时间:2015-11-15 17:28:17

标签: php symfony cookies

我的目标是以编程方式从控制器注销。我使用this nice solution。除了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
    
  5. 因此用户未注销。

    怎么可能? LONGSESS Cookie设置为deleted,已过期,但下一个请求具有相同的值?

2 个答案:

答案 0 :(得分:1)

解决方案是在clearCookie方法调用中设置第三个参数framework: session: cookie_domain: YOUR-DOMAIN.COM 。它必须等于会话设置中的域:

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

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

所以,正确的方式:

i

答案 1 :(得分:-1)

你试过了吗?

$response->sendHeaders();

之后:

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