경고 : 심포니 캐시 메커니즘은 개인 캐싱을 지원하지 않습니다. 잘못 누설 된 데이터가 적용됩니다!
전혀 어떤 방식으로 세션에 따라 내용, 세션에 의해 제한 특히 콘텐츠를 cache.yml
를 사용하지 마십시오
cache.yml를 사용하지 마십시오. cache.yml 은 사용자가 처음 본 모든 버전을 무조건 표시합니다.은 로그인했는지 여부를 나타냅니다.
사용 조건 캐시 필터 대신
하는 conditional cache filter을 만듭니다. 다음은 모든 페이지 을 캐쉬하고 따라서 신임 정보 myCredential
을 가진 모든 사용자에 대해 첫 번째 사용자의 버전을 표시합니다.
// apps/myApp/lib/conditionalCacheFilter.php
class conditionalCacheFilter extends sfFilter() {
public function execute($filterChain) {
$context = $this->getContext();
$user = $context->getUser();
if ($user->isAuthenticated() && $user->hasCredential('myCredential')) {
foreach ($this->getParameter('pages') as $page) {
$context->getViewCacheManager()->addCache($page['module'], $page['action'], array('lifeTime' => 300));
}
}
// Execute next filter
$filterChain->execute();
}
}
# filters.yml
conditionalCache:
class: conditionalCacheFilter
param:
pages:
- { module: myModule, action: myAction }
cache: ~
이 특정 자격을 가진 사용자에게만 표시되는 데이터 무거운 페이지에 유용하지만 모든 사용자가 동일한 페이지를 얻을 사용 사례. 신임장 특정 통계 페이지 모음이 좋은 예입니다. 당신은 직접 페이지를 지정할 수 있습니다
대체 사용은 필터 캐시에 추가 할 수 있습니다. 특정 페이지에 대해서만 필터를 명시 적으로 활성화하는 것이 유용 할 수 있습니다.
// apps/backend/lib/conditionalCacheFilter.php
$context = $this->getContext();
$user = $context->getUser();
if ($user->isAuthenticated() && $user->hasPermission()) {
$context->getViewCacheManager()->addCache('myModule', 'myAction', array(
'withLayout' => true,
'lifeTime' => 3600,
));
}
#filters.yml
conditionalCache:
class: conditionalCacheFilter
pages:
- { module: myModule, action: myAction }
진정한 개인 캐싱
심포니는 사용자 별 개인 캐시에 대한 규정이 없습니다. 이 경우에는 client side cache control headers with the private setting을 사용해야합니다. 당신은 또한 nginx 리버스 프록시 또는 이와 유사한 설정을 사용할 수 있습니다.
출처
2014-03-06 14:34:38
cmc
답변 해 주셔서 감사합니다. – hardik
@hadrik 물론! 스택 오버 플로우 스코어 기반의 오만함을 결코 가질 수 없으므로, upvote 및 자유로운 추가 포인트를 허용합니다. – cmc