1

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

$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

4 回答 4

2

解决方案很简单:

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

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

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

它将有可用的数据。

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

于 2013-05-10T09:53:37.277 回答
0

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

Mage_Core_Controller_Varien_Action

而不是这个

Mage_Core_Controller_Front_Action

如果不深入这些,我不确定主要区别是什么,但我知道您不会有延长头等舱的客户会话!

于 2014-01-18T17:02:16.987 回答
0

我因没有在我的自定义模块中获得客户会话而受苦。它在我的本地主机上运行良好,但在服务器中我无法获得客户会话。

我通过替换 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>

于 2014-08-14T04:55:38.617 回答
0

所以,我花了 3 个多小时在谷歌上搜索原因,最后我随机决定删除 Controller 构造函数覆盖,是的!会话回来了!

然而,我通过调用父构造函数正确地覆盖了它!

于 2018-07-20T17:41:08.037 回答