如何在Magento中使用Session

5

我注意到在Magento中有不止一种会话类,例如Mage::getModel('core/session')、Mage::getModel('customer/session')等。当我想要将会话作为存储时,我应该选择哪个会话类?为什么?我很困惑。


你说的“作为存储”是什么意思?你想要存储什么? - René Höhle
我的意思是我们可以保存和检索数据的东西。在开发中,特别是在用户会话中,通常会将一些数据保存到会话中,并在接下来的交互中检索它,例如没有用户登录的愿望清单项目。 - user1527110
1个回答

12

Magento的代码是按模块组织的。其中一个目的是提供命名空间。也就是说,模块允许一组开发人员编写代码,而不用担心另一组开发人员会意外地覆盖他们的变量、对象等。

Magento中的每个模块都可以有自己的会话对象。通过为每个模块分配自己的会话对象,Magento帮助开发人员避免了PHP全局会话变量中的名称冲突。例如,下面的代码:

Mage::getModel('core/session')->setData('foo',$someValue);
Mage::getModel('customer/session')->setData('foo',$someOtherValue);

即使它们具有相同的键,也会将两个值保存到会话中。

关于应该选择哪个会话类 - 如果您正在编写自己的模块,则应创建自己的会话类/模型,从而避免上述冲突。

实际上,只要以某种方式对变量进行命名空间分隔,在核心/会话上保存东西不应该成为问题。

Mage::getModel('core/session')->setData('my_namespace_foo',$someValue);

谢谢!那么,不同类型的会话类实例共享生命周期吗?我们可以为每个实例指定一个值吗? - user1527110
我不确定,你需要查看实现。 - Alana Storm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接