Magento 可以在缓存键中使用会话变量吗?

Posted

技术标签:

【中文标题】Magento 可以在缓存键中使用会话变量吗?【英文标题】:Can Magento use a session variable in a cache key? 【发布时间】:2012-02-23 02:53:14 【问题描述】:

我正在对几个主页布局进行拆分 A-B 测试。有一个观察者设置会话变量(组 A 或组 B),然后布局会根据该变量进行更改。

问题在于页面正在缓存(在 Magento 整页缓存中),无论用户在哪个组中,他们都看到的是 A 页面或 B 页面。

我可以修改 Magento 使主页的每个版本分别缓存吗?或者我可以在主页上完全禁用缓存吗?或者有没有更好的方法来做这种测试?

【问题讨论】:

您应该为您的块实现整页缓存打孔。请参阅本教程 this tutorial 和 this question on SO。 【参考方案1】:

这并不直接适用,但我必须根据页脚所在的页面以不同方式缓存页脚,最后编辑 Mage/Page/Block/html/Footer.php 文件并通过将部分 url 添加到返回的变量。你能不附加会话变量吗?

我知道您并没有像我一样看页脚,但它似乎可以为您指明一个有用的方向。

【讨论】:

【参考方案2】:

您可以使用符合 HTTP 1.1 的标头来更改特定页面的缓存行为。

见:http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2.6

您需要的标头是Cache-Control: no-cache

您需要将该标题与文档一起发送出去。使用 php,您将使用 header 函数来指定标题。

header("Cache-Control: no-cache");

【讨论】:

抱歉,我的问题不够清楚。有问题的是内部 Magento 缓存,而不是浏览器缓存。

以上是关于Magento 可以在缓存键中使用会话变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

会话缓存(Session Cache)?

如何在 Magento 中自己的会话变量中保存值?

Magento EE 1.9 的缓存:我们应该使用整页缓存(带有打孔)和/或“经典”块缓存吗?

致命错误:未捕获的错误:在 magento 2 中刷新缓存时找不到类“DOMDocument”

VaryByCustom 不适用于会话变量

对于 websocket 服务器,使用 SSL 会话缓存是一个坏主意吗?