【发布时间】:2022-01-28 18:57:27
【问题描述】:
我们希望在 Shopware 6 的产品详细信息页面上显示客户(实际上是客户组)的特定信息。
好像有HTTP缓存,如果特定客户群显示页面,我们担心页面会被缓存,信息会泄露给非客户。
这个假设正确吗?
The documentation 没有透露太多这方面的信息。
有没有办法设置特定的缓存标签,让信息只显示给正确的客户群?
还是我们需要通过 AJAX 动态获取数据?
额外问题:能否在自动测试中模拟 HTTP 缓存以确保功能正常工作?
到目前为止我发现了什么:
-
controller的is注解
@httpCache,好像控制一个页面是否缓存 -
缓存密钥在
\Shopware\Storefront\Framework\Cache\HttpCacheKeyGenerator::generate中生成。它考虑了完整的请求 URI,以及注入的一些cacheHash。我相信它不会考虑客户群 -
也许这个
generate()方法可以被修饰,但我不确定这是否是正确的方法。 -
设置了一个 cookie
sw-cache-hash,它会影响缓存。它考虑到了客户。 -
sw-cache-hash被创建 here:if ($context->getCustomer() || $cart->getLineItems()->count() > 0) { $cookie = Cookie::create(self::CONTEXT_CACHE_COOKIE, $this->buildCacheHash($context)); $cookie->setSecureDefault($request->isSecure()); $response->headers->setCookie($cookie); } else { $response->headers->removeCookie(self::CONTEXT_CACHE_COOKIE); $response->headers->clearCookie(self::CONTEXT_CACHE_COOKIE); }
因此,一旦您登录或购物车中有一些商品,就会使用不同的缓存哈希。这取决于以下内容,但不取决于它自己的客户群:
private function buildCacheHash(SalesChannelContext $context): string
{
return md5(json_encode([
$context->getRuleIds(),
$context->getContext()->getVersionId(),
$context->getCurrency()->getId(),
]));
}
【问题讨论】:
标签: shopware page-caching shopware6