在产品详细信息页面上显示客户特定信息 - 缓存如何?

Display customer specific information on product detail page - what about the caching?

我们想在 Shopware 6 的产品详细信息页面上显示客户(实际上是客户组)的特定信息。

好像有HTTP缓存,怕特定客户群显示页面会被缓存,信息泄露给非客户。

这个假设是否正确?

The documentation 没有透露太多关于这方面的信息。

有没有办法设置特定的缓存标签,使信息只显示给正确的客户群?

或者我们是否需要通过 AJAX 动态获取数据?

额外问题:能否在自动测试中模拟 HTTP 缓存以确保功能正常工作?

到目前为止我发现了什么:

因此,一旦您登录 购物车中有一些商品,就会使用不同的缓存哈希。这取决于以下内容,但不取决于其自身的客户群:

private function buildCacheHash(SalesChannelContext $context): string
{
    return md5(json_encode([
        $context->getRuleIds(),
        $context->getContext()->getVersionId(),
        $context->getCurrency()->getId(),
    ]));
}

如您在最后一个代码片段中所见,它考虑了活动规则 ID。 这意味着,如果您创建一个规则(通过设置 > 规则生成器),该规则在某个组上处于活动状态,但在另一个组或没有组上处于活动状态,它将被考虑并为不同的客户组创建不同的缓存哈希。

此外还有 cache-invalidation states 的概念,描述了何时不应使用缓存。

您可以在 shopware.yaml 配置文件中为 http-cache 作为一个整体或在路由级别为 store-api 路由进行配置。

来自平台内的默认配置:

shopware:
   cache:
      invalidation:
            http_cache: ['logged-in', 'cart-filled']
            product_listing_route: []

如您所见,默认情况下 http-cache 不会在用户登录或购物车中有商品时使用。