我已经制作了一个使用客户会话的自定义模块,但奇怪的是,在现场网站上它没有返回客户数据。 我尝试了以下方法:
$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
它可以工作但不适用于路由器。有什么想法吗? 感谢,
答案 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构造函数的重写,是的,会话又回来了!。
但是,我通过调用父构造函数正确覆盖了它。