我正在使用symfony2,而且我的cookie遇到了奇怪的行为。这是一个过程: 1-我渲染一个经典形式,没有什么棘手的 - >好 2-我验证了表格,我设置了一个cookie来记住表格没问题
public function indexAction(Request $request)
{
[...]
if ($form->isValid()) {
[...]
$cookie = new Cookie('cookietest', 'rdvalue', time()+3600 * 24 * 365, '/', null, false, false);
$response = new Response();
$response->headers->setCookie($cookie);
$response->prepare($request);
$response->send();
$formSuccess = true;
}
return array('form' => $form->createView(), 'formSuccess' => $formSuccess);
}
在这一点上,一切似乎都很完美。在我的渲染索引模板中,我有一个渲染控制器如下:
index.html.twig:
{% if formSuccess %}
{{ render(controller('MyBundle:Demo:checkCookie')) }}
{% endif %}
并在我的checkCookie操作中:
public function checkCookieAction(Request $request){
[...]
if($request->cookies->has('cookietest')) <-- return false. If i dump it, i don't see the cookietest cookie
[...]
}
我应该能够看到cookie,因为我在之前的控制器中设置了它,这是一个呈现index.html.twig页面的控制器。
更奇怪的是,如果我只是刷新页面,这次if($request->cookies->has('cookietest'))
行返回 true !!
我错过了什么?
答案 0 :(得分:1)
如果我没错,这就是它的工作方式。官方PHP
的文档说明了这一点:
设置完cookie后,可以在下一页加载$ _COOKIE数组时访问它们。 Cookie值也可能存在于$ _REQUEST。
中
因此,我相信您的Cookie会在下一个请求中显示。我对吗?
答案 1 :(得分:1)
正如@Jovan Perovic所说,当你在表单提交后第一次看到一个页面时,你实际上没有cookie,因为你刚收到回复。
解决方案是在验证表单后重定向:
if ($form->isValid()) {
...
$this->redirect($this->generateUrl('actual_route'));
}
它也在文档中推荐:
在成功提交表单后重定向用户可防止用户点击&#34;刷新&#34;浏览器按钮并重新发布数据。