我的目标是以编程方式从控制器注销。我使用这个不错的解决方案。除了未删除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
,已过期,但下一个请求的值相同?
解决方案是在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');