Magento客户/会话无法正常工作

时间:2012-03-27 14:39:47

标签: php session magento model

这个问题首先进入意识,因为前端的订单历史记录页面(* / 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'属性并不总是有效?有人可以分享他的知识。非常感谢。

4 个答案:

答案 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