今天,我们将讨论magento会话管理。Magento在网站的以下四个区域或部分中创建了会话模型。
- 核心–可以使用Mage :: getModel(“ core / session”)对象进行访问。您可以在其中存储全局会话数据,您可以在整个站点中使用该数据
- 客户–可以使用Mage :: getModel(“ customer / session”)对象进行访问。您可以在其中存储与客户相关的会话数据,您可以使用这些数据与网站的客户区域相关,例如帐户,登录名,忘记密码的页面等。
- 结帐–可以使用Mage :: getModel(“ checkout / session”)对象进行访问。您可以在其中存储与结帐相关的会话数据,您可以使用这些数据与网站的结帐区域(例如购物篮,一页结帐页面等)相关。
- 管理员–可以使用Mage :: getModel(“ admin / session”)对象进行访问。在此您可以存储与管理员相关的会话数据,您可以在网站的管理区域中的任何位置使用它。
上面的类是由Magento创建的,因此您可以为站点的不同区域创建具有相同名称的相同会话变量。
让我们看下面的例子:
在这里,我们将不同的数据存储在同一会话名称变量-中
Mage::getModel('core/session')->setData('foo','global data');
Mage::getModel('customer/session')->setData('foo','customer data');
Mage::getModel('checkout/session')->setData('foo','checkout data');
Mage::getModel('admin/session')->setData('foo','admin data');
Mage::getModel('your_custom_module/session')->setData('foo','custom data');
在这里,我们从同一个会话变量-中访问不同的数据:
Mage::getModel('core/session')->getData('foo');
Mage::getModel('<code>customer</code>/session')->getData('foo');
Mage::getModel('checkout/session')->getData('foo');
Mage::getModel('admin/session')->getData('foo');
Mage::getModel('your_custom_module/session')->getData('foo');
这样,您与使用会话变量的其他模块发生冲突的可能性很小。最好的方法是在模块高度使用会话变量的情况下创建自己的会话类,否则可以使用尽可能唯一的会话变量名,例如namespace_modulename_foo以避免冲突。
您如何创建自己的会话类?
如果尝试上述所有模型类,则它们都将由Mage_Core_Model_Session_Abstract类扩展,并且您可以通过扩展抽象类来以相同的方式创建自己的会话模型类。
关键是调用抽象类的init()函数来注册会话类的唯一命名空间。因此,如果您查看此类Mage_Checkout_Model_Session,它将调用init()函数'checkout'作为参数。
public function __construct()
{
$this->init('checkout');
}
上面的代码实际上代表了$_SESSION['checkout']
当您执行以下操作
Mage::getModel("checkout/session")->setFoo('some value for checkout data')
它表示$_SESSION['checkout']
['foo'] ='结帐数据的某个值';
以相同的方式,您可以创建自己的会话类Scommerce_Custom_Model_Session
class Scommerce_Custom_Model_Session extends Mage_Core_Model_Session_Abstract
{
public function __construct()
{
$this->init('custom_unique_name');
}
}
并按如下方式存储和访问会话变量:
$custom = Mage::getModel('custom_unique_name/session');
$custom->setFoo('Some Value');
$custom->getFoo('Some Value');
希望本文对您有所帮助。请留下您的评论,让我们知道您的想法?