在Symfony2中重定向和阻止缓存

时间:2013-05-25 19:26:52

标签: symfony

我这样做:

domain.com/route-name/?do-something=1

..设置一个cookie,然后使用302重定向重定向到这个:

domain.com/route-name/

它允许在不管页面查看的情况下进行操作(cookie存储用户的设置)。

我使用默认的Symfony2反向代理缓存,一切都很好,但我需要阻止上述请求缓存。

我用它来执行重定向:

// $event being a listener, usually a request listener

$response = new RedirectResponse($url, 302);    
$this->event->setResponse($response);

我尝试过这样的事情,但似乎没有任何作用:

$response->setCache(array('max_age' => 0));
header("Cache-Control: no-cache");

那么如何阻止它缓存这些页面?

2 个答案:

答案 0 :(得分:10)

您必须确保使用RedirectResponse发送以下标头(如果设置了GET参数)并使用常规的路由响应:

Cache-Control: private, max-age=0, must-revalidate, no-store;

实现你想要的东西:

$response->setPrivate();
$response->setMaxAge(0);
$response->setSharedMaxAge(0);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('no-store', true);
私人是重要的,并且在昏迷的答案中缺失。

不同之处在于使用Cache-Control:private,您不允许代理缓存通过它们传输的数据。

答案 1 :(得分:1)

在你的回复中试试这个:

$response->headers->addCacheControlDirective('no-cache', true);
$response->headers->addCacheControlDirective('max-age', 0);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('no-store', true);

您也可以使用注释:

http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/cache.html

看看:

Why both no-cache and no-store should be used in HTTP response?