这个问题首先进入意识,因为前端的订单历史记录页面(* / sales / order / history /)只显示一条短消息:您没有下订单。
经过一些调试,结果证明问题在于这个功能:
Mage::getSingleton('customer/session')
除了网站ID之外,它不会返回包含当前客户信息的会话实体,这就是订单集合在过滤客户ID后返回空结果的原因。
Stack Overflow实际上有一篇文章讨论了类似的问题: Customer session is different in different parts of a Magento website 。但它没有给出很好的解释。
令人困惑的是,根据我的情况,该功能在某些部分运行良好,但在其他部分则不然。例如,我插入了
<?php echo var_export(Mage::getSingleton('customer/session')->getCustomerId(), true) ?>
进入目录产品列表模板,并在登录后显示客户ID。但是同一行在订单历史记录页面中返回Null。
我将这些代码放在app / code / core / Mage / Customer / Model / Session.php
中public function getCustomer()
{
...
$customer = Mage::getModel('customer/customer')
->setWebsiteId(Mage::app()->getStore()->getWebsiteId());
if ($this->getId()) {
$customer->load($this->getId());
}
$this->setCustomer($customer);
return $this->_customer;
}
设置网站ID后,它会根据$ this-&gt; getId()加载客户实体。
为什么客户会话实体的'id'属性并不总是有效?有人可以分享他的知识。非常感谢。
答案 0 :(得分:1)
在假设问题出在一个特定区域时,我会小心Magento。在意识到你需要从头开始之前,你可以沿着一个非常深的兔子洞。
如果你准确的问题在于会话getter,请试试这个:
Mage::getSingleton('core/session', array('name' => 'frontend'));
但我也会继续关注其他选择。听起来很像很多人使用缓存的问题。考虑尝试相同的所有缓存关闭。整页缓存可以对变量值执行意外操作。
您在示例中回复了哪些文件?在进一步帮助之前,我需要知道这一点。
答案 1 :(得分:1)
如果您使用的是谷歌浏览器,您可以右键单击页面,选择检查元素,然后选择资源标签,查找 Cookie 在左侧菜单中,然后点击您的域名。
在域名下,将显示为其设置的cookie,以及路径,到期等。非常有用。
在您的情况下,您正在寻找“名称”下的“前端”会话Cookie。您可以删除它,并刷新页面以查看Magento是否重新创建它,在这种情况下会话是probs工作。希望有所帮助:)
PS:Magento非常重视会话,如果它们被打破了,其他的东西也会在节目中被打破。
答案 2 :(得分:1)
有趣的是,当客户会话为空且您正在访问历史记录页面时,用户未被重定向到登录页面(customer / account / login /)。请确认Mage_Customer或Mage_Sales是否已自定义。
如果重写,这将是第一个检查的地方。
答案 3 :(得分:0)
我要对这些Mage问题提出这个答案,因为没有人提到饼干可能会被错误地设置。我们导入了一个错误的 cookie域的数据库更新后,我们在上午浪费了。
确保core_config_data表具有此路径值的正确设置:
web/cookie/cookie_domain
域名应与网址中的内容相匹配。
https://www.myawesomemagentosite.com
web/cookie/cookie_domain = .myawesomemagentosite.com