Magento的核心/会话,客户/会话和结账/会话有什么区别?

时间:2013-07-09 04:17:48

标签: magento

我想使用magento会话来跟踪客户会话,但找不到上述3种会话类型之间的链接。

这3种类型的主要区别是什么?

为什么Magento有3种会话类型而不是1种?

它们是如何联系在一起的?

2 个答案:

答案 0 :(得分:32)

核心/会话

这是最简单的骨骼会话。它提供有关访问者的基本“匿名”数据(cookie,IP地址,错误消息)。

Mage_Core_Model_Session::getCookie()
Mage_Core_Model_Session::addMessage()
Mage_Core_Model_Session::useValidateRemoteAddr()

客户/会话

此对象处理与特定客户相关的事项(登录或注销,名称,ID,电子邮件,客户组)

Mage_Customer_Model_Session::getCustomerId()
Mage_Customer_Model_Session::isLoggedIn()
Mage_Customer_Model_Session::getCustomerGroupId()

结帐/会话

这会存储与报价,客人与否有关的信息(车辆总数,项目,结账进度)

Mage_Checkout_Model_Session::getQuote()
Mage_Checkout_Model_Session::setStepData()
Mage_Checkout_Model_Session::getQuote()->getTotals()

每个会话模型都从Mage_Core_Model_Session_Abstract扩展而来,它们只提供不同的功能。 core/session真的不多了。它的大部分功能都是从它们共享的父类继承而来。

您可以使用各种方法将customer/sessioncheckout/session相关联。

e.g。

Mage::getSingleton('checkout/session')
    ->setCustomer(Mage::getSingleton('customer/session')->getCustomer());

P.S。不要忘记adminhtml/session

答案 1 :(得分:7)

Magento引入了分组来管理不同用途的会话数据,使其与对应的用户区别开来。让我们深入了解细节。 Magento中的所有会话数据都存储在全局变量$_SESSION中,这是一个来自编程视图的数组,并将它们分类为独立的组,每个组由一个由会话类封装的数组表示。

默认情况下,Magento配备了三个核心,客户和结账会话类。

Mage::getSingelton('core/session')Mage::getSingleton('customer/session')Mage::getSingleton('checkout/session')是使用的三个会话函数 在Magento。 $_SESSION变量最终具有以下形式:

$_SESSION=array('core'=>array(...), 'customer'=>array(...), 'checkout'=>array(...),...);

我们应该避免直接对$_SESSION变量进行操作,而是采用Magento的方式,例如Mage::getSingleton('core/session')-getXXX()Mage::getSingleton('core/session')->setXXX()

如果需要自定义会话类,则需要继承Mage_Core_Model_Session_Abstract。以下是一个例子:

class Company_Module_Model_Session extends Mage_Core_Model_Session_Abstract
{
    public function __construct() {
        $this->init('module');
    }
}

然后我们可以通过调用Mage::getSingleton('mgwishlist/session')来使用这个自定义会话类,就像Magento中的任何其他会话类一样。

特别是,PHP会话只能保留基本数据类型的值,例如intboolstring等,因此经常触及序列化/反序列化。