Symfony Sulu缓存始终未命中

Symfony Sulu缓存始终未命中,symfony,sulu,Symfony,Sulu,我正在尝试设置缓存Sulu CMS页面。在本地,我已将环境设置为prod(尝试使用dev,但在出现问题时切换为prod),但启用了缓存调试 config/packages/sulu_http_cache.yaml如下所示: sulu_http_cache: proxy_client: symfony: enabled: true debug: enabled: true config/packages/pr

我正在尝试设置缓存Sulu CMS页面。在本地,我已将环境设置为prod(尝试使用dev,但在出现问题时切换为prod),但启用了缓存调试

config/packages/sulu_http_cache.yaml如下所示:

sulu_http_cache:
    proxy_client:
        symfony:
            enabled: true
        debug:
            enabled: true
config/packages/prod/cache.yaml如下所示

framework:
    cache:
        app: cache.adapter.filesystem
        system: cache.adapter.system
缓存目录存在于my/var目录中,但它们是空的

所有响应都有以下标题:


如果缓存始终未命中,则表示您正在访问请求中的
会话。Symfony中的以下内容将自动启动会话,例如:

  • 使用csrf令牌(
    csrf\u令牌
  • 在路由上配置unlazy防火墙(检查您的
    安全\u网站.yaml
  • 访问flash消息或其他类似内容(
    app.flash
  • 访问会话本身(
    app.session
  • 正在访问当前用户(
    app.user
由于会话访问表明“响应”是特定于用户的,并且对每个访问者都不相同,symfony会将响应设置为private,因此它总是缓存未命中

编辑您的代码,确保您不再访问会话,并且
缓存控制
标题响应为“public”,HttpCache组件将缓存此响应

如您所述,symfony自动行为可通过以下方式禁用:

$response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 1); 
我个人会避免这种情况,因为它可能会缓存特定于安全性的数据,或者在html中写入缓存的用户名,这是您不希望看到的

另一种方法是使用基于UserContext的缓存,这意味着,例如,每个角色都有自己的缓存。有关这方面的文档,请参见:


这主要用于应用程序在网站上具有安全性,并且只有特定角色才能查看特定路由的情况。

感谢您的帮助-您是对的,我们处理会话的方式在每次请求时都会激活会话。我确实尝试过删除它,但是缓存似乎每次都会丢失。最后,我通过执行以下操作手动覆盖缓存头(在某些静态页面上):$response->headers->set(AbstractSessionListener::NO\u AUTO\u CACHE\u CONTROL\u header,1)@JamieMaxwell I添加了这一点和特定于用户的缓存。请随时将其标记为已接受的答案,让其他人知道此处的错误。