在打开缓存的情况下设置Magento中的会话变量

时间:2012-10-10 14:45:49

标签: ajax magento session-variables

我正在尝试设置会话变量,因此每个会话只会出现一次弹出框。

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

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

超级简单。

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

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方法,并显示或不显示新闻稿弹出窗口。

这一切都完美有效......直到我打开Cache,此时会话变量未设置或至少在块/模板文件中无法访问。

我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

 public function getCacheLifetime() { return null; } 

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