0

场景: 在 Magento 2 与完全缓存的集成中。

我们有两种类型的客户Type 1Type 2. 这两种类型的客户都保存在同一个客户组下,我们根据customer type属性来区分客户。

类型 1 的客户可以属于不同的部门(1 到多个)。当他登录后第一次访问该站点时,他被重定向到选择他的部门。

此值保存在客户会话中,在运行时客户可以更改他的部门,该值在现有客户会话中更新。

当我们访问一个新页面时,我们会得到更新的会话,但是如果我们访问之前访问过的页面,我们会从会话中获取旧数据。

尝试的选项:

  • 我们试图从客户会话工厂而不是客户会话加载数据,但我们仍然面临这个问题。我们的理解是保存在客户对象中的数据作为新数据加载,但由于我们的数据保存在客户会话下,它不会返回最新数据。
  • 对于我们用来sections加载数据的页面的某些部分,但在这种情况下,如果更早访问页面,则在第一次刷新时未加载正确的数据,在第二次刷新时数据会正确加载。
  • 我们还尝试从 AJAX 更新会话数据,但这也没有多大用处,因为该数据没有加载到页面上。
  • 我们也尝试使用上下文变量,但是当我们在保存上下文变量的同时记录数据时,会记录正确的数据,但是当我们尝试获取上下文数据时,没有返回任何数据。此外,即使为每个部门设置了不同的上下文变量,页面似乎也是从缓存中呈现的。
  • 我们不能使用 Cookie,因为这是敏感数据,这将是最后一个选项。

在 Magento 1 中,我们可以选择通过扩展 app\code\local\Enterprise\PageCache\Model\Processor.php 来生成新的 Cache 密钥,

例子

if (isset($_COOKIE[Enterprise_PageCache_Model_Cookie::IS_USER_ALLOWED_SAVE_COOKIE])) { $uri .= '_' . $_COOKIE[Enterprise_PageCache_Model_Cookie::IS_USER_ALLOWED_SAVE_COOKIE]; }

Magento 2 中是否有任何类似的选项。如果有,请分享一些参考链接以集成相同的选项。

4

0 回答 0