我想使用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/session对checkout/session他们的各种方法.
例如
Mage::getSingleton('checkout/session')
->setCustomer(Mage::getSingleton('customer/session')->getCustomer());
Run Code Online (Sandbox Code Playgroud)
等等
PS别忘了adminhtml/session!
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和等,所以序列化/反序列化常常感动.