我正在寻找一些有关 Magento 中可用的不同会话类型的差异的信息。
有一个核心会话、一个客户会话和一个结帐会话。但我不太确定何时使用哪一个以及它们的行为方式可能会有所不同。它们是否都在同一时间有效,或者结帐会话是否比核心会话更早失效?
我正在寻找一些有关 Magento 中可用的不同会话类型的差异的信息。
有一个核心会话、一个客户会话和一个结帐会话。但我不太确定何时使用哪一个以及它们的行为方式可能会有所不同。它们是否都在同一时间有效,或者结帐会话是否比核心会话更早失效?
好问题!
直接回答这个问题:所有会话模型的生命周期都是相同的。会话生命周期由 Magento 和您的服务器软件中的配置决定。您可能想要问的问题(以 Magento 处理各种会话的方式)是“给定会话类型的数据持续了多长时间?”
答案是实现之一,因此最好的方法是在代码中搜索实例化点。要使用的搜索模式是getSingleton('core/session')(或任何会话模型)。任何调用它的地方——如果它是第一次遇到它——将在$_SESSION
超全局中创建会话命名空间(如下所述)。
因此,会话永远不会“被杀死”,但数据会根据实现而被清除。臭名昭著的是checkout/session
,因为在下订单后数据会被擦除。
除此之外,您可以依靠该会话来满足您的持久性需求。
Magento 中的会话模型使用抽象基类来定义各种 API Mage_Core_Model_Session_Abstract
,. 此类填充以下角色/功能:
init()
,字面上分离下每种类型的存储值$_SESSION[$namespace]
addError()
、addMessage()
、addNotice()
和addSuccess()
)Varien_Object::__call()
. *请注意,会话有一个修改后的魔法 getter,它允许您从会话中检索数据并通过一次调用取消设置(例如$session->getSomeParam(true)
)因此,如果您希望您的模块拥有自己的会话命名空间,只需将会话模型声明为从会话摘要和受保护的_construct()
调用中扩展即可$this->init('namespace')
。
会话模型的所有数据都将设置在会话命名空间下的数组键中;对于核心,这将是:
$session = Mage::getSingleton('core/session')->setSomeValue('Some string');
可以表示为
$_SESSION['core']['some_value'] = 'Some string'