MAGENTO会话管理(核心/结帐/客户)

今天,我们将讨论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');

希望本文对您有所帮助。请留下您的评论,让我们知道您的想法?

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论