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

Bat*_*MUD 16 magento

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

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

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

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

Ste*_*ins 34

核心/会话

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

Mage_Core_Model_Session::getCookie()
Mage_Core_Model_Session::addMessage()
Mage_Core_Model_Session::useValidateRemoteAddr()
Run Code Online (Sandbox Code Playgroud)

客户/会话

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

Mage_Customer_Model_Session::getCustomerId()
Mage_Customer_Model_Session::isLoggedIn()
Mage_Customer_Model_Session::getCustomerGroupId()
Run Code Online (Sandbox Code Playgroud)

结帐/会话

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

Mage_Checkout_Model_Session::getQuote()
Mage_Checkout_Model_Session::setStepData()
Mage_Checkout_Model_Session::getQuote()->getTotals()
Run Code Online (Sandbox Code Playgroud)

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

您可以将有关customer/sessioncheckout/session他们的各种方法.

例如

Mage::getSingleton('checkout/session')
    ->setCustomer(Mage::getSingleton('customer/session')->getCustomer());
Run Code Online (Sandbox Code Playgroud)

等等

PS别忘了adminhtml/session!


Afr*_*lam 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(...),...);
Run Code Online (Sandbox Code Playgroud)

我们应该避免直接对$_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');
    }
}
Run Code Online (Sandbox Code Playgroud)

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

特别是,PHP会话只能保留基本数据类型的值,例如int,bool,string和等,所以序列化/反序列化常常感动.

  • `$ _SESSION`变量可以处理除[`resource`](http://www.php.net/manual/en/intro.session.php)类型之外的所有数据类型(包括对象). (2认同)