在Symfony2中重定向和阻止缓存

use*_*356 4 symfony

我这样做:

domain.com/route-name/?do-something=1
Run Code Online (Sandbox Code Playgroud)

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

domain.com/route-name/
Run Code Online (Sandbox Code Playgroud)

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

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

我正在使用它来执行重定向:

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

$response = new RedirectResponse($url, 302);    
$this->event->setResponse($response);
Run Code Online (Sandbox Code Playgroud)

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

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

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

Nic*_*ich 10

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

Cache-Control: private, max-age=0, must-revalidate, no-store;
Run Code Online (Sandbox Code Playgroud)

实现你想要的东西:

$response->setPrivate();
$response->setMaxAge(0);
$response->setSharedMaxAge(0);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('no-store', true);
Run Code Online (Sandbox Code Playgroud)

私人是重要的,并在昏迷的答案中失踪.

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