【问题标题】:Private cache in symfony 2 does not generatesymfony 2 中的私有缓存不生成
【发布时间】:2014-09-19 21:19:16
【问题描述】:

我正在尝试为我的应用程序使用 HTTP 缓存,但每次我将缓存设置为私有时,它都不会出现在 app/cache 文件夹中。

对于公共缓存一切正常,正在生成文件/文件夹。

这是我缺少的东西吗?我正在尝试为需要身份验证的网站部分生成缓存。因此缓存应该针对每个用户名,因为它只为该用户提供报告。

这就是我正在做的:

    $response = $this->render('myTemplate.html.twig', array(
        'username' => $username
    ));

    $response->setMaxAge(600);
    $response->setPrivate();

    return $response;

【问题讨论】:

    标签: php symfony caching http-caching


    【解决方案1】:

    Symfony 的 http 缓存充当公共(共享)反向代理服务器。这意味着它只缓存公共响应。

    阅读 Symfony 文档中的 Public vs Private Responses

    网关和代理缓存都被视为“共享”缓存,因为 缓存的内容由多个用户共享。如果用户特定 响应曾经被共享缓存错误地存储,它可能是 稍后返回给任意数量的不同用户。想象一下,如果你的 帐户信息被缓存,然后返回给每个后续 请求其帐户页面的用户!

    为了处理这种情况,可以将每个响应设置为公开或 私人:

    • public:表示响应可能被私有和私有缓存 共享缓存;
    • private:表示全部或部分响应 消息仅供单个用户使用,不得由 共享缓存。

    Symfony 保守地默认每个响应为 私人的。利用共享缓存(如 Symfony 反向 代理),则需要将响应显式设置为公开。

    【讨论】:

    • 我明白,但我也很困惑。我可以做些什么来缓存私有的、内容特定的页面?
    • 你不应该。私有缓存是浏览器的缓存。从技术上讲,可以通过这种方式配置像 Varnish 这样的反向代理,但应该避免这种情况(因为它会为每个用户生成一个新文档)。我建议你阅读tomayko.com/writings/things-caches-domnot.net/cache_docs。我认为您正在尝试在其他类型的缓存会更好地工作的情况下使用 http 缓存。另外,请记住您可以使用 ESI 缓存页面的共享部分。
    • 但据我了解,ESI也是公开的。
    • 是的,但是您可以拥有一个私有页面,其中部分页面被公开缓存(通过 ESI)。
    • 这不会允许客户端向另一个客户端请求页面的各个部分吗?
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2015-01-08
    • 2013-11-20
    • 2013-03-26
    相关资源
    最近更新 更多