繁体   English   中英

Fastly Caching 如何知道用户 session 在 Magento 2 Commerce 中何时发生变化

[英]How does Fastly Caching know when user session has changed in Magento 2 Commerce

背景

Magento 的产品详细信息页面可在目录/产品/视图/id/{product_id} 访问。 它很快就被托管在 magento 云上。 有不同的客户群,每个客户群可以在产品详情页面上看到不同的价格。 我通常会打开两个选项卡,在一个选项卡上,我将注销属于与客户组 A 关联的客户的帐户,然后登录到属于与客户组 B 关联的客户的帐户。每次我这样做,我需要做的就是刷新包含产品详细信息页面的第二个选项卡,价格就会改变。 这很好,这是预期的行为

问题

我现在处于一种情况,我需要能够在后端的 Magento 管理表单中从某个客户组中删除对产品的访问权限,一旦完成,属于该客户组的客户应该不再是假设页面已经在他/她的浏览器中打开,则能够在刷新后访问前端的该产品页面。 事实证明这很难做到。

请注意,此代码在我的开发环境中有效,并且 Varnish 也已启用并在我的开发环境中有效。 快速似乎只是在 magento 云暂存环境中缓存不同。

我做过的事情

我通过添加一个实现Magento\Framework\DataObject\IdentityInterface的块将我自己的附加标签添加到 X-Magento-Tag 。 此标签是客户组 ID 和对正在加载的产品的访问状态的串联。 如果访问被撤销,状态为 0,否则状态为 1。

我在Magento\Framework\App\Http\Context::getVaryString()中添加了一个before插件,这个before插件还添加了相同的客户组 ID 和访问状态的串联。 我相信这就是唯一标识页面的每个缓存版本的速度。

这些都没有奏效。

我的问题

如果在我切换用户帐户时快速运行良好,为什么在需要考虑其他上下文时它不能运行?

在将页面提供给 web 用户之前,如何快速检查用户是否仍然有权访问该产品页面?

如何快速知道当前用户 session 何时发生变化? 也许我可以应用相同的方法来撤销访问权限。

如果在我切换用户帐户时快速运行良好,为什么在需要考虑其他上下文时它不能运行?

我建议查看HTTP 响应标头,因为这些标头将指示 Fastly 如何缓存页面。

通常,对于个人用户独有的内容,将发送一个Cache-Control响应 header,其中的值指示下游 CDN 不应缓存该内容。

这意味着当您注销一个用户帐户然后登录另一个用户帐户时,用户的帐户页面将发送类似Cache-Control: private内容。

请参阅 Fastly 的文档以防止内容被缓存

在将页面提供给 web 用户之前,如何快速检查用户是否仍然有权访问该产品页面?

我建议联系 support@fastly.com,其客户支持团队将能够帮助您调试此问题,但我想这与 Fastly 被指示缓存相关产品页面的方式有关。

您应该检查 HTTP 响应以查看它是否被客户端(即用户的浏览器)或下游缓存(例如 Fastly)缓存。

您也许可以使用Surrogate-Key响应 header 来标记特定产品页面,然后为相关键发出缓存清除。

如何快速知道当前用户 session 何时发生变化? 也许我可以应用相同的方法来撤销访问权限。

Fastly不知道用户的session什么时候变了。 Fastly 要么被指示从其缓存中提供页面,要么在缓存为空或内容已被标记为“私有”(即用户唯一)时从源获取内容。

特定页面(例如用户的帐户页面)很可能通过Cache-Control: private响应 header 发送,以指示不应缓存内容。

我建议在这里联系 support@fastly.com 以获得最佳方法,但如上所述,您也许可以使用Surrogate-Key

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM