今天在改测试站的第三方登陆时,发现user.php下有个$user->check_user($info[‘name’])的方法来判断数据库里是否有重名,该函数通过用户名来查询是否user_id已存在,存在则函数返回user_id。看到这,感觉$user应该是一个obj,于是不得不弄清一下$user这个变量的来源。
先全站搜索内容为”class user”,结果木有找到,接着尝试搜索”function check_user”,出来一大堆文件,一个一个找来,发现是在includes\modules\integrates\integrate.php找到它的定义,
class integrate { ... function check_user($username, $password = null) { $post_username = $username; /* 如果没有定义密码则只检查用户名 */ if ($password === null) { $sql = "SELECT " . $this->field_id . " FROM " . $this->table($this->user_table). " WHERE " . $this->field_name . "='" . $post_username . "'"; return $this->db->getOne($sql); } else { $sql = "SELECT " . $this->field_id . " FROM " . $this->table($this->user_table). " WHERE " . $this->field_name . "='" . $post_username . "' AND " . $this->field_pass . " ='" . $this->compile_password(array('password'=>$password)) . "'"; return $this->db->getOne($sql); } }
然后退过来发现同目录下有ecshop.php文件继承了这个类。
require_once(ROOT_PATH . 'includes/modules/integrates/integrate.php'); class ecshop extends integrate { ... }
并且同目录下还有discuz55.php,dvbbs.php,phpbb.php,ucenter.php等文件,那么到这里就很明显了,ecshop登录的时候检查后台是否设置了用户整合功能,如果没有设置,则调用这里的ecshop.php来管理登录,如果有设置了用户整合,则调用这里相应的整合对象的php,从而进行用户登录管理。
看到这,有些人可能要问,$user和这里的integrate又有个毛关系啊,不急,再看下user.php里头部include的文件include/init.php。这个文件也是大多ecshop都要调用的,发现里面有一行,
$user =& init_users();
最后在/include/lib_common.php里发现如下行,
/** * 初始化会员数据整合类 * * @access public * @return object */ function &init_users() { $set_modules = false; static $cls = null; if ($cls != null) { return $cls; } include_once(ROOT_PATH . 'include/modules/integrates/' . $GLOBALS['_CFG']['integrate_code'] . '.php'); $cfg = unserialize($GLOBALS['_CFG']['integrate_config']); $cls = new $GLOBALS['_CFG']['integrate_code']($cfg); return $cls; }
好了,结束。什么?看不懂?拜拜了您!
最近刚好在弄ecshop登录这块,您这篇文章太有用了,感谢分享~
能帮到人就好。
你还开网店啊?
公司项目而已。
这个必须支持啊~
沙发,学习了,感谢分享。