我想使用 magento 会话来跟踪客户会话,但找不到上述 3 种会话类型之间的链接。
这三种类型的主要区别是什么?
为什么 Magento 有 3 种会话类型而不是一种?
它们是如何联系在一起的?
我想使用 magento 会话来跟踪客户会话,但找不到上述 3 种会话类型之间的链接。
这三种类型的主要区别是什么?
为什么 Magento 有 3 种会话类型而不是一种?
它们是如何联系在一起的?
这是最简单的课程。它提供有关访问者的基本“匿名”数据(cookies、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/session其checkout/session与他们的各种方法联系起来。
例如
Mage::getSingleton('checkout/session')
->setCustomer(Mage::getSingleton('customer/session')->getCustomer());
ETC
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(...),...);
我们应该避免直接对$_SESSION变量进行操作,而是按照 Magento 的方式操作,比如Mage::getSingleton('core/session')-getXXX()and 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 session 只能保留基本数据类型的值,例如int,等,所以经常涉及到序列化/反序列化bool。string