【问题标题】:Setting Session Variables in Magento with Cache Turned on在打开缓存的情况下在 Magento 中设置会话变量
【发布时间】:2012-10-10 14:45:49
【问题描述】:

我正在尝试设置会话变量,以便每个会话仅出现一次弹出框。

为此,我创建了一个在有​​人关闭弹出窗口时通过 AJAX 调用的模块。模块的控制器设置一个会话变量。控制器如下所示:

class Company_Popup_IndexController extends Mage_Core_Controller_Front_Action {
    public function indexAction() {
        Mage::getSingleton('core/session')->setNewsletterPopup('yes');
    }
}

超级简单。

然后,在块中,我检查会话变量是否已设置(或者用户是否已登录):

class Company_Popup_Block_Popup extends Mage_Core_Block_Template
{
    public function displayPopup(){
        if(!$this->helper('customer')->isLoggedIn() && Mage::getSingleton('core/session')->getNewsletterPopup() == null){
            return true;
        }
        else{
            return false;
        }
    }
    public function getSessionData(){
        return Mage::getSingleton('core/session');
    }
}

然后模板文件调用 displayPopup 方法并显示或不显示时事通讯弹出窗口。

这一切都很完美......直到我打开缓存,此时会话变量没有被设置或至少在块/模板文件中不可访问。

我在这里错过了什么?

【问题讨论】:

  • 你在哪里渲染你的块,例如它在 footer.phtml 中吗?
  • 您运行的是 CE 版还是 EE 版?
  • 如果您只使用 javascript 和不缓存 cookie 会更简单。您只能为当前会话设置 cookie...
  • @Goonanism 你需要更具体一点,“打开缓存”在 Magento 中意味着很多不同的东西。您使用的是什么 Magento 版本,您打开了什么“缓存”。如果您不确定后者,您采取了哪些步骤来“打开”缓存?
  • 感谢大家的cmets。澄清几点。我正在使用 1.7 CE 并在 footer.phtml 中呈现块。我已经尝试过 javascript cookie,这有点像噩梦。 “打开缓存”是指进入缓存存储管理并启用所有缓存类型。

标签: ajax magento session-variables


【解决方案1】:

我想这个块正在被缓存,这意味着更新的会话变量没有被访问,而是返回了被缓存的原始调用。

您应该尝试禁用块内的缓存。

尝试将其添加到您的块中:

 public function getCacheLifetime() { return null; } 

这将禁用块上的缓存,并应允许正确调用它。

【讨论】:

  • +1 以获得良好的信息,但我认为不是这样。整个块代码都在上面,并且没有明确的缓存集,这意味着该块不会被缓存为 HTML 输出。更有可能是整个页面缓存跳过了正在执行的控制器操作。 (但如果没有来自原始海报的更多信息,这两种方式都很难分辨)
  • 嗨@Andrew,我刚刚尝试了你的建议,但我担心它没有奏效。正如 Alan 所说,我没有在任何地方设置任何显式缓存。
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 2016-03-20
  • 1970-01-01
相关资源
最近更新 更多