我这样做:
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");
那么如何阻止它缓存这些页面?
答案 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?