2013-05-25 2 views
4
에 방지 캐시는

나는이 일을하고있다 :리디렉션 및 Symfony2

쿠키를 설정하고 302 리디렉션 사용하여이 리디렉션 요식
domain.com/route-name/?do-something=1 

: 그것은 조치를 취할 수 있습니다

domain.com/route-name/ 

을 (쿠키는 사용자에 대한 설정을 저장합니다).

기본 Symfony2 리버스 프록시 캐시를 사용하고 있는데 모두 정상이지만 위의 요청이 캐싱되지 않도록해야합니다.

나는이 리디렉션을 수행하기 위해 사용하고 있습니다 :

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

이 어떻게 내가 그 페이지를 캐시 멈추지 :

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

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

나는이 아무것도하지만, 같은 일을 시도했다가 작동하는 것 같다?

답변

8

을 당신이 followi를 보내고 있는지 확인하십시오. 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); 

개인이 중요하다 혼수 상태의 실종 대답.

차이점은 캐시 제어 : 개인은 프록시가 프록시를 통해 이동하는 데이터를 캐시하지 못하게한다는 것입니다.

+0

도움을 주셔서 감사합니다. 두 대답 모두 매우 유사하며 두 결과 모두 동일합니다. 이 기능은 첫 번째 URL (검색어 문자열 포함)을 캐싱하는 데는 효과적이지만 캐시 된 최종 URL (domain.com/route-name/ 부분)으로 리디렉션됩니다. 캐싱 헤더가 리디렉션 된 페이지 또는 다른 것으로 전달되어야하는 것처럼 보입니다. – user2143356

+0

domain.com/route-name **/** 경로는 캐시 제어 헤더도 보내야합니다. 당신은 리다이렉트 응답으로 그들을 보내고 당신의 루트는 당신입니까? – nifr

+0

기본적으로 위에서 나열한 두 줄의 코드를 추가했습니다. 나는 또한 http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/RedirectResponse.html을 보았지만 그 밖의 할 수있는 것을 볼 수 없었다. – user2143356

1

응답에서이 작업을 시도해보십시오

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

을 그리고 한 번 봐 걸릴 :

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

너무 주석을 사용할 수 있습니다 당신이 가지고

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

+0

도움 주셔서 감사합니다. 이것과 다른 대답은 매우 비슷하고 감사합니다. 그것이 내가 필요로하는 것을하지 않고있는 것에 따라 코멘트를 위해 다른 대답을 보라. 감사합니다, – user2143356

관련 문제