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里面是否保存用户信息。