我的目标是以编程方式从 Controller 注销。我用 this nice solution .除了未删除 LONGSESS
(重命名为 REMEMBERME
)cookie 之外,一切正常。它删除了但没有:)
在 Controller 代码中注销:
$response = $this->redirectToRoute('homepage');
$response->headers->clearCookie('LONGSESS');
return $response;
因此,调用此操作。
此操作的请求 header (如预期):
Cookie SESS=n4jbl1m61l6bceesbeusrbq044; LONGSESS=QXBwQnVuZGxlXEVudGl0eVxVc2VyOmRYTmxja0IxYzJWeUxtTnZiUT09OjE0NDgyMDMyMjQ6ZTFhNzBlNGEyMWM4NGM3N2UzYmI3ZmJiNWIzMGM5MDg2ZDAyOWY1ZGVhMWI4NTYyNGQ0OTJmNjVmNmRjOTY2NQ%3D%3D
此操作的响应 header (如预期):
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
重定向 header (如预期):
Location:/app_dev.php/
主页的下一个请求 header (与预期不同 -
LONGSESS
值与上一个请求相同):Cookie:LONGSESS=QXBwQnVuZGxlXEVudGl0eVxVc2VyOmRYTmxja0IxYzJWeUxtTnZiUT09OjE0NDgyMDMyMjQ6ZTFhNzBlNGEyMWM4NGM3N2UzYmI3ZmJiNWIzMGM5MDg2ZDAyOWY1ZGVhMWI4NTYyNGQ0OTJmNjVmNmRjOTY2NQ%3D%3D; SESS=ai1gt79r49o184du3tknv7tdf6
所以用户没有登出。
怎么可能呢? LONGSESS
cookie 设置为已删除
,已过期但下一个请求具有相同的值?
最佳答案
解决方案是在clearCookie
方法调用中设置第三个参数domain
。它必须等于 session 设置中的域:
framework:
session:
cookie_domain: YOUR-DOMAIN.COM
和
firewalls:
your_firewall:
remember_me:
domain: YOUR-DOMAIN.COM
所以,正确的做法是:
$response->headers->clearCookie('LONGSESS', '/', 'YOUR-DOMAIN.COM');
关于php - 注销时 Symfony 2 不会删除记住我的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33722635/