我正在尝试在登录控制器中设置一个cookie来实现“记住我”系统。虽然我已经使用了我在网络上找到的确切代码,但对我来说却是错误的。我希望你能帮助我找出我所缺少的东西。
我们来看看代码:
public function loginAction(Request $request) {
// Receiving the login form
// Get Doctrine, Get EntityManager, Get Repository
if(/* form information matche database information */) {
// Creating a session => it's OK
// Creating the cookie
$response = new Response();
$response->headers->setCookie(new Cookie("user", $user));
$response->send();
$url = $this->generateUrl('home');
return $this->redirect($url);
} else
return $this->render('***Bundle:Default:Login.html.php');
}
我包含了这些:
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Cookie;
请注意,登录工作正常,会话已创建,但cookie没有。
答案 0 :(得分:18)
而不是:
$response->send();
尝试使用:
$response->sendHeaders();
在此之后你应该能够重定向。
答案 1 :(得分:17)
默认情况下Symfony\Component\HttpFoundation\Cookie创建为HttpOnly,这会触发支持浏览器的安全措施;这有助于缓解javascript中可能发生的某些XSS攻击。
在这样的浏览器集$httpOnly
参数中公开cookie到false
:
new Cookie('user', $user, 0, '/', null, false, false); //last argument
值得注意的是,在此次编辑时,框架配置为不默认情况下使用HttpOnly cookie:请参阅cookbook (cookie_httponly)。