自定义模块magento中的客户会话为空

时间:2013-05-10 08:27:31

标签: magento magento-1.7

我已经制作了一个使用客户会话的自定义模块,但奇怪的是,在现场网站上它没有返回客户数据。 我尝试了以下方法:

$sessCustomer = Mage::getSingleton('customer/session', array('name' => 'frontend'));
    echo '<pre>';print_r($sessCustomer->getCustomer()->getData()); echo '</pre>';exit;

它返回:

Array
(
    [website_id] => 1
)

如果我打印客户会话:

Mage::getSingleton('customer/session')->getData();

返回(确切输出):

     array(
[_session_validator_data] => Array
        (
            [remote_addr] => 58.65.183.10
            [http_via] => 
            [http_x_forwarded_for] => 58.65.183.10
            [http_user_agent] => Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0
        )

    [session_hosts] => Array
            (
                [bestevalue.info] => 1
            )
    [messages] => Mage_Core_Model_Message_Collection Object
            (
                [_messages:protected] => Array
                    (
                    )

                [_lastAddedMessage:protected] => 
            )
    [id] => 
)

我在这里很累,我已登录,可以看到客户信息中心上有客户信息,但无法在我的自定义模块中使用该会话,请指导我如何解决此问题。

更新

我已在/app/etc/local.xml中检查了会话类型是文件

<session_save><![CDATA[files]]></session_save>

那么有不同的方法用PHP提取会话信息?我做错了什么?

更新2:

我也使用路由器制作漂亮的网址 public function match(Zend_Controller_Request_Http $request)

开始这个动作我放了

Mage::getSingleton('core/session', array('name' => 'frontend'));

但仍然没有使用路由器没有它正在工作,例如直接访问操作:

site.com/module/controller/action

它可以工作但不适用于路由器。有什么想法吗? 感谢,

4 个答案:

答案 0 :(得分:2)

解决方案很简单:

private function _getCustomerSession() {
    Mage::getSingleton('core/session', array('name' => 'frontend'));
    return Mage::getSingleton('customer/session');
}

初始化会话并返回它。像这样调用这个函数:

$this->_getCustomerSession()->getCustomer()

它将提供数据。

googlers的更新和未来的参考:我今天又遇到了这个问题,我自己的解决方案无效(就像问题一样)。进一步的调查显示我已经覆盖了我的自定义模块中的preDispatch()函数,以检查模块是否在后端启用,如果没有重定向到主页但有错误。在这种情况下,解决方案是 - 显然 - 调用parent::preDispatch();

答案 1 :(得分:0)

对此的答案是,您为自定义模块操作扩展的控制器很可能不是正确的类。 我也遇到了同样的问题,经过一个小时左右的时间在屏幕上猛击头脑后,我意识到我的控制器已经扩展了这个

Mage_Core_Controller_Varien_Action

而不是这个

Mage_Core_Controller_Front_Action

我不确定如果没有进入这些主要区别是什么,但我知道你没有一个客户会话扩展第一堂课!

答案 2 :(得分:0)

我没有在我的自定义模块中获取客户会话。它在我的localhost工作正常,但在服务器中我无法得到客户会话。

我通过替换config.xml中的frontname

找到了解决方案

我刚刚更改了<frontName>votingsytem</frontName> to <frontName>vote</frontName>

我得到了客户会话,它在实时服务器上工作正常。

我希望这会有用。

<强>之前:

<frontend>
  <routers>
     <votingsytem>
        <use>standard</use>
        <args>
           <module>Vgs_Votingsytem</module>
           <frontName>votingsytem</frontName>
        </args>
     </votingsytem>        
  </routers>
  <layout>
     <updates>
        <votingsytem>
           <file>votingsytem.xml</file>
        </votingsytem>
     </updates>
  </layout>

<强>后:

<frontend>
  <routers>
     <votingsytem>
        <use>standard</use>
        <args>
           <module>Vgs_Votingsytem</module>
           <frontName>vote</frontName>
        </args>
     </votingsytem>        
  </routers>
  <layout>
     <updates>
        <votingsytem>
           <file>votingsytem.xml</file>
        </votingsytem>
     </updates>
  </layout>

答案 3 :(得分:0)

因此,我花了3个多小时来查询原因,最后我随机决定删除Controller构造函数的重写,是的​​,会话又回来了!。

但是,我通过调用父构造函数正确覆盖了它。