我正在寻找有关Magento中可用的不同会话类型差异的一些信息。
有核心会话,客户会话和结账会话。但我不太确定何时使用哪一个以及它们的行为方式可能不同。它们是否同时有效,或者结账会话是否早于核心会话失效?
答案 0 :(得分:26)
很棒的问题!
直接回答问题:所有会话模型的生命周期都是相同的。会话生存期由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()
随意设置参数的重载(魔术吸气剂和设定者)。 *请注意,会话具有修改后的魔术吸气剂,允许您从会话中检索数据并通过一次调用取消设置(例如$session->getSomeParam(true)
)因此,如果您希望模块具有自己的会话命名空间,只需将会话模型声明为从会话摘要和受保护的_construct()
调用$this->init('namespace')
中扩展。
会话模型的所有数据都将在会话命名空间下的数组键中设置;对于核心,这将是:
$session = Mage::getSingleton('core/session')->setSomeValue('Some string');
可以表示为
$_SESSION['core']['some_value'] = 'Some string'