我的目标是以编程方式从控制器注销。我使用this nice solution。除了LONGSESS
(重命名为REMEMBERME
)cookie未被删除外,一切正常。它已删除但不是:)
在控制器代码中注销:
$response = $this->redirectToRoute('homepage');
$response->headers->clearCookie('LONGSESS');
return $response;
所以,请调用此操作。
此操作的请求标头(按预期方式):
Cookie SESS=n4jbl1m61l6bceesbeusrbq044; LONGSESS=QXBwQnVuZGxlXEVudGl0eVxVc2VyOmRYTmxja0IxYzJWeUxtTnZiUT09OjE0NDgyMDMyMjQ6ZTFhNzBlNGEyMWM4NGM3N2UzYmI3ZmJiNWIzMGM5MDg2ZDAyOWY1ZGVhMWI4NTYyNGQ0OTJmNjVmNmRjOTY2NQ%3D%3D
此操作的响应标头(按预期方式):
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
重定向标头(按预期方式):
Location:/app_dev.php/
主页的下一个请求标头(不符合预期 - LONGSESS
值与之前的请求相同):
Cookie:LONGSESS=QXBwQnVuZGxlXEVudGl0eVxVc2VyOmRYTmxja0IxYzJWeUxtTnZiUT09OjE0NDgyMDMyMjQ6ZTFhNzBlNGEyMWM4NGM3N2UzYmI3ZmJiNWIzMGM5MDg2ZDAyOWY1ZGVhMWI4NTYyNGQ0OTJmNjVmNmRjOTY2NQ%3D%3D; SESS=ai1gt79r49o184du3tknv7tdf6
因此用户未注销。
怎么可能? LONGSESS
Cookie设置为deleted
,已过期,但下一个请求具有相同的值?
答案 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');