zoukankan      html  css  js  c++  java
  • Ucenter源码解析--frame.php

    /control/admin/frame.php的流程结构类似于这样:/control/admin/frame.php -->调用父类adminbase的构造函数,(/model/adminbase的实例)-->adminbase类的构造函数,调用父类base类的构造函数(/model/base.php),真正干活的是base类的构造函数,所以,我们直接看base类的构造函数都实现了什么。

    //构造函数
    function __construct() {
    $this->base();
    }
    //base函数
    function base() {
    //调用内部函数,
    $this->init_var();
    //初始化数据库和连接数据库信息
    $this->init_db();
    //引入//data/cache下面的文件,并加载全部的应用信息
    $this->init_cache();
    //初始化所用的应用ID
    $this->init_app();
    //初始化用户信息
    $this->init_user();
    $this->init_template();
    //发送通知函数
    $this->init_note();
    $this->init_mail();
    //$this->cron();
    }

    可以看到,base干的话有:

    • 初始化成员变量onlineip,lang
    • 建立数据库连接
    • 将需要的数据表中的信息写到/data/cache对应的文件,可以说,你在/data/cache/目录下面看到的内容都是对应的表格中的数据,这样以来就可以提高代码效率。不需要重复读写数据库
    • 从上一步中的/data/cache/apps.php文件中读取对应的appid内容
    • 读取浏览器的cookie,使用/data/cache/apps.php文件中读取出对应appid的密钥,解密cookie,然后解出userid,username
    • 设置默认主题
    • 使用fsock()向各个应用发生通知
    • 发生email

    这个是base的构造函数的功能,adminbase类调用完父类的构造函数,就会执行页面的加载,我们可以看代码:

    function adminbase() {

    //调用父类的构造函数

    parent::__construct();

    $this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;

    $sid = $this->cookie_status ? getgpc('sid', 'C') : rawurlencode(getgpc('sid', 'R'));

    $this->view->sid = $sid;

    $this->view->assign('sid', $this->view->sid);

    $this->view->assign('iframe', getgpc('iframe'));

    $a = getgpc('a');

    if(getgpc('m') !='user' && $a != 'login' && $a != 'logout') {

    $this->check_priv();

    }

    }

    执行了父类的构造函数,就会执行自己的check_priv(),check_prive()的函数代码如下 :

    $username = $this->sid_decode($this->view->sid);

    if(empty($username)) {

    header('Location: '.UC_API.'/admin.php?m=user&a=login&iframe='.getgpc('iframe', 'G').($this->cookie_status ? '' : '&sid='.$this->view->sid));
    exit;

    这是部分代码,所以,第一次进ucenter出现 的登陆界面,就是这个函数实现。我们看地址栏的url:http://ucenter.xadieu.com/admin.php?m=user&a=login&iframe=&sid=

    是不是一样的。所以这个时候又回到了/admin.php中的代码就收到$m=user,$a=login.会自动加载对应的类。

    include UC_ROOT."control/admin/$m.php";
    $control = new control();
    $method = 'on'.$a;
    if(method_exists($control, $method) && $a{0} != '_') {
    $control->$method();

     可以看出这个时候/control/admin/user.php被加载进来,并实例化该类,执行onlogin()。而onlogin函数执行操作,是负责对前端的显示

    该函数的最后一句代码,就是调用了这个 页面的显示:$this->view->display('admin_login');前端界面显示是这样的:

    下一篇,我们把这登陆界面介绍其代码

  • 相关阅读:
    mac/unix系统:C++实现一个端口扫描器
    C++:通过gethostbyname函数,根据服务器的域名,获取服务器IP
    PostMan Setting Proxy 设置 代理
    企业架构 Red Hat Drools KIE Project 三大核心产品
    IDS,IPS,IPD
    Vehicle routing with Optaplanner graph-theory
    SonarQube Detection of Injection Flaws in Java, C#, PHP
    Spring AOP Log
    Code Quality and Security | SonarQube
    Gradle vs. Maven: Performance, Compatibility, Speed, & Builds
  • 原文地址:https://www.cnblogs.com/xiaoyuqin/p/4288720.html
Copyright © 2011-2022 走看看