Flo*_*Flo 23 session magento session-management
我正在寻找有关Magento中可用的不同会话类型的差异的一些信息.
有核心会话,客户会话和结账会话.但我不太确定何时使用哪一个以及它们的行为方式可能不同.它们是否同时有效,或者结账会话是否早于核心会话失效?
ben*_*rks 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');
Run Code Online (Sandbox Code Playgroud)
可以表示为
$_SESSION['core']['some_value'] = 'Some string'
Run Code Online (Sandbox Code Playgroud)