注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

欢迎来到三件事的空间

欢迎登陆 javacs.cn

 
 
 

日志

 
 

discuz5.0-logging.php解析  

2007-11-12 16:09:44|  分类: php-discuz |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
<?php

/*
    [Discuz!] (C)2001-2006 Comsenz Inc.
    This is NOT a freeware, use is subject to license terms

    $RCSfile: logging.php,v $
    $Revision: 1.11.2.3 $
    $Date: 2007/02/02 21:58:51 $
*/

define('CURSCRIPT', 'logging');//定义常量后面就不许修改

require_once './include/common.inc.php';//只包含一次。
require_once DISCUZ_ROOT.'./include/misc.func.php';////包含misc函数文件

if($action == 'logout' && !empty($formhash) && $formhash == FORMHASH) {//注销情况

    clearcookies();//清除cooks
    $groupid = 7;//角色重置为游客  在`cdb_usergroups` 表
    $discuz_uid = 0;// cdb_members    会员表
    $discuz_user = $discuz_pw = '';//用户名密码置空
    $styleid = $_DCACHE['settings']['styleid'];//重置页面样式
  //SHOPEX USERAPI 接口技术文档 (外部系统用户挂接) -- USERAPI 参数规格与加密方式
    if($passport_status == 'shopex' && $passport_shopex && $_DSESSION['adminid'] != 1) {
        $dreferer = dreferer();
        $verify = md5('logout'.$dreferer.$passport_key);
        showmessage('logout_succeed', 'api/relateshopex.php?action=logout&forward='.rawurlencode($dreferer).'&verify='.$verify);
    } else {
        showmessage('logout_succeed', dreferer());
    }

} elseif($action == 'login') {//用户登录

    if($discuz_uid) {  //显示登陆成功页面
        showmessage('login_succeed', $indexname);
    }
    //isset()判断是否设置     //登陆用户名的字段名 判断是否以用户名或sid登录
    $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)) {//判断提交后的检查,主要是检查验证码,安全提问和来路是不是正常。
        //显示登陆页面,设置样式,日期时间,和cookes。
        $discuz_action = 6;

        $referer = dreferer();

        $thetimenow = '(GMT '.($timeoffset > 0 ? '+' : '').$timeoffset.') '.
        //gmdate 格式化一个 GMT/UTC 日期/时间
            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数组里取出cooktiome。
        $_DCOOKIE['cookietime'] = isset($_DCOOKIE['cookietime']) ? $_DCOOKIE['cookietime'] : 2592000;//2592000/60000=43分钟
        $cookietimecheck = array((isset($_DCOOKIE['cookietime']) ? intval($_DCOOKIE['cookietime']) : 2592000) => 'checked');//intval() 可以把任意其他类型的数值转换成整型.

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

        include template('login');

    } else {//是submit方式提交
        //处理登陆
        //用户信息置空
        $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 — 把数组中的值赋给变量    
            list($username, $md5_password) = daddslashes(explode("\t", authcode($loginauth, 'DECODE')), 1);
        } else {
            $md5_password = md5($password);//加密密码
            $password = preg_replace("/^(.{".round(strlen($password) / 4)."})(.+?)(.{".round(strlen($password) / 6)."})$/s", "\\1***\\3", $password);
        }
        // //查询数据表members,usergroups   取出用户认证信息包括UID,用户名,密码,安全提问,管理权限,用户组ID,页面风格,上次访问,最后发帖,是否允许隐身
        $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'");

        $member = $db->fetch_array($query);

        if($member['discuz_uid'] && $member['discuz_pw'] == $md5_password) {//判断用户名和密码是否一致

            if($member['discuz_secques'] == $secques) {//安全提问一样

                extract($member);//extract — 从数组中将变量导入到当前的符号表

                $discuz_userss = $discuz_user;
                $discuz_user = addslashes($discuz_user);//addslashes 使用反斜线引用字符串
             //判断是不是隐身登录
                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($passport_status == 'shopex' && $passport_shopex) {
                    if($groupid == 8) {
                        $verify = md5('loginmemcp.php'.$passport_key);
                        showmessage('login_succeed_inactive_member', 'api/relateshopex.php?action=login&forward=memcp.php&verify='.$verify);
                    } else {
                        $dreferer = dreferer();
                        $verify = md5('login'.$dreferer.$passport_key);
                        showmessage('login_succeed', 'api/relateshopex.php?action=login&forward='.rawurlencode($dreferer).'&verify='.$verify);
                    }
                } else {
                    if($groupid == 8) {
                        showmessage('login_succeed_inactive_member', 'memcp.php');
                    } else {
                        showmessage('login_succeed', dreferer());
                    }
                }
            } elseif(empty($secques)) {
               //安全提问不匹配且安全提问不为空
                $username = dhtmlspecialchars($member['discuz_user']);//dhtmlspecialchars  转换特殊字符函数
                $loginmode = dhtmlspecialchars($loginmode);
                $styleid = intval($styleid);//ntval — 获取变量的整数值
                $cookietime = intval($cookietime);
                //对用户的信息进行加密解密处理
                $loginauth = authcode($member['discuz_user']."\t".$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".
            dhtmlspecialchars($password)."\t".
            ($secques ? "Ques #".dhtmlspecialchars($questionid) : '')."\t".
            $onlineip."\n";

        loginfailed($loginperm);
        //打开地址和url函数
        @$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');
}

?>
  评论这张
 
阅读(388)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018