• discuz代码分析logging.php (转载)


    <?php

    //定义操作页面
    define('CURscrīpt', 'logging');

    //包含公共文件
    require_once './include/common.inc.php';
    //包含misc函数文件
    require_once DISCUZ_ROOT.'./include/misc.func.php';
    //判断动作
    //注销

    if($action == 'logout' && !empty($formhash&& $formhash == FORMHASH) {
         
    //清除cookies
    clearcookies();
    //重置用户状态为游客
    $groupid = 7;
    $discuz_uid = 0;
    //清除用户名密码
    $discuz_user = $discuz_pw = '';
    //重置页面样式
    $styleid = $_DCACHE['settings']['styleid'];
         
    //显示注销成功页面
    showmessage('logout_succeed', dreferer());

    }
    //登陆
    elseif($action == 'login') {
         
    //判断用户是否为游客
    if($discuz_uid) {
       
    //显示登陆成功页面
       showmessage('login_succeed', $indexname);
    }
    //登陆用户名的字段名
    $field = isset($loginfield&& $loginfield == 'uid' ? 'uid' : 'username';
         
    //验证码检查
    //get secure code checking status (pos. -2)

    $seccodecheck = substr(sprintf('%05b', $seccodestatus), -2, 1);
         
    //判断是否为提交登陆     
    if(!submitcheck('loginsubmit', 1, $seccodecheck)) {
             
    //显示登陆页面
       $discuz_action = 6;

       
    $referer = dreferer();

       
    $thetimenow = '(GMT '.($timeoffset > 0 ? '+' : '').$timeoffset.''.
        
    gmdate("$dateformat $timeformat", $timestamp + $timeoffset * 3600).

       
    $styleselect = '';
       
    $query = $db->query("SELECT styleid, name FROM {$tablepre}styles WHERE available='1'");
       
    while($styleinfo = $db->fetch_array($query)) {
        
    $styleselect .= "<option value=\"$styleinfo[styleid]\">$styleinfo[name]</option>\n";
       }

       
    $_DCOOKIE['cookietime'= isset($_DCOOKIE['cookietime']) ? $_DCOOKIE['cookietime': 2592000;
       
    $cookietimecheck = array((isset($_DCOOKIE['cookietime']) ? intval($_DCOOKIE['cookietime']) : 2592000=> 'checked');

       
    if($seccodecheck) {
        
    $seccode = random(4, 1);
       }

       
    include template('login');

    else {
             
    //处理登陆
             //用户信息置空

       $discuz_uid = 0;
       
    $discuz_user = $discuz_pw = $discuz_secques = $md5_password = '';
       
    $member = array();
             
    //判断是否被限制登陆,返回0,1,2,3。声明在misc.func.php
       $loginperm = logincheck();
       
    if(!$loginperm) {
        
    //显示限制登陆
        showmessage('login_strike');
       }
             
    //安全提问处理,返回一串字符或空。声明在global.func.php
       $secques = quescrypt($questionid, $answer);
       
    //判断是否安全提问页面登陆
       if(isset($loginauth)) {
        
    $field = 'username';
        
    $password = 'VERIFIED';
        
    list($username, $md5_password= explode("\t", authcode($loginauth, 'DECODE'));
       } 
    else {
        
    $md5_password = md5($password);
        
    $password = preg_replace("/^(.{".round(strlen($password/ 4)."})(.+?)(.{".round(strlen($password/ 6)."})$/s", "\\1***\\3", $password);
       }
             
    //查询数据表members,usergroups
       $query = $db->query("SELECT m.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
          m.adminid, m.groupid, m.styleid AS styleidmem, m.lastvisit, m.lastpost, u.allowinvisible
          FROM {
    $tablepre}members m LEFT JOIN {$tablepre}usergroups u USING (groupid)
          WHERE m.
    $field='$username'");
             
    //取出用户认证信息包括UID,用户名,密码,安全提问,管理权限,用户组ID,页面风格,上次访问,最后发帖,是否允许隐身
       $member = $db->fetch_array($query);
             
    //验证登陆
       if($member['discuz_uid'&& $member['discuz_pw'== $md5_password) {
                 
    //验证安全提问
                 if($member['discuz_secques'== $secques) {
         
    //安全提问匹配
         //从数组中将变量导入到当前的符号表 

         extract($member);
                     
    //处理用户名
         $discuz_userss = $discuz_user;
         
    $discuz_user = addslashes($discuz_user);
                     
    //判断隐身模式
         if(($allowinvisible && $loginmode == 'invisible'|| $loginmode == 'normal') {
          
    //更新members表用户现在的模式:隐身或普通
          $db->query("UPDATE {$tablepre}members SET invisible='".($loginmode == 'invisible' ? 1 : 0)."' WHERE uid='$member[discuz_uid]'", 'UNBUFFERED');
         }

         
    $styleid = intval(empty($_POST['styleid']) ? ($styleidmem ? $styleidmem :
           
    $_DCACHE['settings']['styleid']) : $_POST['styleid']);

         
    $cookietime = intval(isset($_POST['cookietime']) ? $_POST['cookietime':
           (
    $_DCOOKIE['cookietime'? $_DCOOKIE['cookietime': 0));
         
    //写cookie
         dsetcookie('cookietime', $cookietime, 31536000);
         dsetcookie(
    'auth', authcode("$discuz_pw\t$discuz_secques\t$discuz_uid", 'ENCODE'), $cookietime);

         
    $sessionexists = 0;
         
    //判断是否为等待验证会员
         if($groupid == 8) {
          showmessage(
    'login_succeed_inactive_member', 'memcp.php');
         } 
    else {
          showmessage(
    'login_succeed', dreferer());
         }
        } 
    elseif(empty($secques)) {
         
    //安全提问不匹配且安全提问不为空
         $username = dhtmlspecialchars($member['discuz_user']);
         
    $loginmode = dhtmlspecialchars($loginmode);
         
    $styleid = intval($styleid);
         
    $cookietime = intval($cookietime);
         
    //加密已接受的用户名和密码
         $loginauth = authcode(addslashes($member['discuz_user'])."\t".addslashes($member['discuz_pw']), 'ENCODE');
         
    //显示回答安全提问
         include template('login_secques');
         dexit();

        }

       }
             
    //生成密码错误日志记录
       $errorlog = "<?PHP exit('Access Denied'); ?>\t".$timestamp."\t".
        dhtmlspecialchars(
    $member['discuz_user'? $member['discuz_user': stripslashes($username))."\t".
        
    $password."\t".
        (
    $secques ? "Ques #".dhtmlspecialchars($questionid: '')."\t".
        
    $onlineip."\n";

       loginfailed(
    $loginperm);
             
    //日志记录加入日志文件
       @$fp = fopen(DISCUZ_ROOT.'./forumdata/illegallog.php', 'a');
       @
    flock($fp, 2);
       @
    fwrite($fp, $errorlog);
       @
    fclose($fp);
             
    //显示登陆出错页面
       showmessage('login_invalid', NULL, 'HALTED');

    }

    }
    else {
    showmessage(
    'undefined_action');
    }
    ?>


  • 相关阅读:
    一键复制文本框内容代码、
    改掉这些坏习惯,你不再是菜鸟
    使用cookie保存页面登录信息
    二维数组转换成一维数组
    jQuery选择器总结
    cookie 和session 的区别详解
    PHP扫雷(转载)。
    PHP简易计算器方法2
    PHP简易计算器方法1
    业务逻辑的存储过程(添加学生的案例)(自动编号)
  • 原文地址:https://www.cnblogs.com/redfox241/p/1508763.html
Copyright © 2020-2023  润新知