你现在的位置:首页 > PHP网站建设知识库 > ecmall > 正文

ecmall二次开发之会员登录

在进行ecmall二次开发时,我们会遇到会员登录的问题,那么它的会员登录机制是怎么样的呢?

\

经过研究,我们发现,在ecpp.base.php这个文件中,有一个BaseVisitor类,它使用session的方法来判断当前登录的用户是否合法,下面的代码是它的构造器:

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;   
        }   
    }  

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;  
        }  
    }  
 

在构造器中对$_SESSION数组中的_info_key进行判断,存在则用户已经登录,不存在则用户还没有登录。

而这里的_info_key,则是在它的子类:UserVisitor中定义的:

class UserVisitor extends BaseVisitor   
{   
    var $_info_key = 'user_info';   
}  

class UserVisitor extends BaseVisitor  
{  
    var $_info_key = 'user_info';  
}  
 

这个子类,在FrontendApp类中定义的:

function _init_visitor()   
    {   
        $this->visitor =& env('visitor', new UserVisitor());   
    }  

function _init_visitor()  
    {  
        $this->visitor =& env('visitor', new UserVisitor());  
    }  
 

对visitor进行初使化的。因此这就可以让我们在FrontendApp的子类中使用$this->visitor->get("user_id")就可以获取当前登录用户的信息,而根据ecmall的继承图中我们可以知道,基本在所有的实体对象操作类中都可以使用它对当前登录用户进行访问!而在BaseVisitor类中,集合了更多的函数可以对用户是否登录,获取当前用户信息等内容进行操作。

而对于系统后台的用户操作,与前台是一样的,只不过后台是:admin/app/backend.base.php中的BackendApp类