2016-04-08 128 views
0

我试图使用缓存与symfony。symfony私有缓存和公共缓存之间的差异

在我的控制器

我写这个片段

public function indexAction(Request $request) 
{ 
    $response = $this->render('default/index.html.twig', [ 
     'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..'), 
    ]); 

    $response->setMaxAge(10); 
    $response->setPublic(); 
    return $response; 
} 

,在我的树枝我有一个功能random(100)然后我也$kernel = new AppCache($kernel);启用了app_dev.php和app.php 刷新时我看到相同的“随机数“10秒,没关系。

如果我忽略$response->setPublic();,缓存将变为私有,并且我总是有不同的数字。我也尝试登录到我的应用程序,但缓存似乎不起作用

我也尝试添加getOptions在应用程序缓存()

class AppCache extends HttpCache 
{ 
    protected function getOptions() 
    { 
     return array(
      'debug'     => false, 
      'default_ttl'   => 0, 
      'private_headers'  => array('Authorization', 'Cookie'), 
      'allow_reload'   => false, 
      'allow_revalidate'  => false, 
      'stale_while_revalidate' => 2, 
      'stale_if_error'   => 60, 
     ); 
    } 
} 
+0

我不是很确定你的问题是什么,你能更清楚一点吗? – Federkun

+0

当然!当我使用$ response-> setPublic();缓存工作,(测试我使用随机(100)在树枝,我看到相同的数字为10秒),如果我使用$ response-> setPrivate()我总是有不同的数字(刷新浏览器时) – monkeyUser

回答

2

如果缓存私人,你告诉给反向代理,你不希望缓存响应。 symfony会发送这个头:

Cache-Control: private 

这绕过中间代理,由于响应旨在用于单个用户。在这种情况下,您使用浏览器缓存。如果您不想要,请将其设置为public

您可以在这里阅读更多关于它的信息:public vs private response

+0

当我使用私人,我不使用缓存? 我明白,私人缓存是单用户(如记录使用)。 – monkeyUser

+1

不,如果你设置'Cache-Control:private',你只是不使用反向代理的缓存,但你仍然可以使用浏览器的缓存 – Federkun

+0

非常感谢,这是我正在寻找的答案! – monkeyUser