2016-04-08 124 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