php – 如何在symfony 1.4中缓存会话相关数据?
阅读symfony 1.4的缓存行为后,我发现symfony 1.4没有考虑缓存模板的用户会话.
现在,情况是,我有几个模板有一些代码的一部分依赖于用户会话..让我们说如果用户被认证他有一个设施在产品列表中提问…现在我该如何缓存这个模板文件…有一件事我知道为所有会话代码块创建单独的模板并将缓存设置为false.但我想知道其他聪明的方法,如果你有…… 谢谢, 解决方法
警告:symfony缓存机制不支持私有缓存.错误地应用它将导致泄露的数据!
不要使用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 } 没有真正的私人缓存 Symfony没有针对用户私有缓存的规定.您应该将client side cache control headers with the private setting用于此用例.您也可以使用nginx反向代理或类似的设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |