php - Magento 客户/ session 不工作

标签 php session magento model

这个问题首先被意识到是因为前端的订单历史页面(*/sales/order/history/)只显示一条短消息:您没有下订单。

经过一番调试,发现问题出在这个函数上:

Mage::getSingleton('customer/session')

它不会返回包含除网站 ID 之外的当前客户信息的 session 实体,这就是订单集合在筛选客户 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->getId()加载客户实体。

为什么客户 session 实体的“id”属性并不总是有效?有人可以分享他的知识吗?非常感谢。

最佳答案

当假设问题出在某个特定区域时,我会谨慎对待 Magento。在意识到需要从头开始之前,您可能会陷入一个相当深的兔子洞。

如果您准确地认为问题出在 session getter 上,请尝试以下操作:

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

但我也会继续寻找其他选择。听起来与很多人在缓存方面遇到的问题类似。考虑在关闭所有缓存的情况下尝试相同的操作。全页缓存可能会对变量值执行意想不到的操作。

您在示例中回显哪个文件?在提供进一步帮助之前我需要了解这一点。

关于php - Magento 客户/ session 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9891761/

相关文章:

php - Laravel CSRF 中间件不检查 X-CSRF-TOKEN 请求 header

php - 按值对多维数组排序

php - CodeIgniter:cookie、 session 、重定向太多?

firefox - 运行 MTAF 时使用 selenium server 2.24.1 和 firefox 13 截屏

PHP 将第二个参数传递给函数

php - 从 AJAX 调用下载内置在 PHP 输出缓冲区中的文件

java - JSP 中如何创建 session ?

oracle - 当 session 在没​​有连接的情况下打开和关闭时,Hibernate 查询停止

Magento:在正文类中显示自定义属性

facebook - Open Graph 抓取基本 URL 而不是它给定的 URL