ECMALL源码阅读五:用户信息
在ECMALL中,任何继承了FrontendApp的对象都可以通过$this->visitor访问到用户信息。 FrontendAPP对象,初始化了用户对象UserVisitor。
用户对象初始化(frontend.base.php)
<?php
function _init_visitor()
{
$this->visitor =& env('visitor', new UserVisitor());
}
?>
而UserVisitor对象继承于BaseVisitor对象
用户对象(frontend.base.php)
<?php
class UserVisitor extends BaseVisitor
{
var $_info_key = 'user_info';
}
?>
在BaseVisitor对象的构造函数中,BaseVisitor对象把用户信息从session存储到自身的属性info中
存储用户信息 (ecpp.base.php)
<?php
function BaseVisitor()
{
if ($_SESSION[$this->_info_key]['user_id'])
{
$this->info = $_SESSION[$this->_info_key];
$this->has_login = true;
}
else
{
$this->info = array(
'user_id' => 0,
'user_name' => Lang::get('guest')
);
$this->has_login = false;
}
}
?>
因此,我们访问$this->visitor,其实访问的是BaseVisitor对象。BaseVisitor对象中实现了很多用户信息操作方法。
如果,我们想实现”用户一周免登录”的功能。那么,我们需要修改BaseVisitor构造函数。不仅需要从_SESSION里面读取信息。
也要判断Cookie里面是否保存用户信息。