zoukankan      html  css  js  c++  java
  • 二、后台登陆login.php【dedecms后台源码分析】 Confi

    <?php
    /**
     * 后台登陆
     *
     * @version        $Id: login.php 1 8:48 2010年7月13日Z tianya $
     * @package        DedeCMS.Administrator
     * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.
     * @license        http://help.dedecms.com/usersguide/license.html
     * @link           http://www.dedecms.com
     */
    //引入公共的显示文件   目录路径   域名/include/common.inc.php
    require_once(dirname(__FILE__).'/../include/common.inc.php');
    //引入管理员登陆类       目录路径   域名/include/userlogin.class.php
    require_once(DEDEINC.'/userlogin.class.php');
    //判断$dopost是否为空   $dopost是点击提交的发送变量
    if(empty($dopost)) $dopost = '';
    
    //检测安装目录安全性
    //判断是否安装dedecms
    //判断安装目录是否存在
    if( is_dir(dirname(__FILE__).'/../install') )
    {	
    	//如果安装之后的install_lock.txt文件不存在
        if(!file_exists(dirname(__FILE__).'/../install/install_lock.txt') )
        {
          //以写的方式打开install_lock.txt
          //如果无法写入则执行后面那一句
          $fp = fopen(dirname(__FILE__).'/../install/install_lock.txt', 'w') or die('安装目录无写入权限,无法进行写入锁定文件,请安装完毕删除安装目录!');
          //写入ok
          fwrite($fp,'ok');
          //关闭文件
          fclose($fp);
        }
        //为了防止未知安全性问题,强制禁用安装程序的文件
        //判断安装的index.php存在        目录路径   域名/install/index.php
        if( file_exists("../install/index.php") ) {
        	//rename() 函数重命名文件或目录。
        	/**
        	 * 若成功,则该函数返回 true。若失败,则返回 false。
        	 * 语法
        	 * rename(oldname,newname,context)
        	 * 参数	描述
        	 * oldname	必需。规定要重命名的文件或目录。
        	 * newname	必需。规定文件或目录的新名称。
        	 * context	可选。规定文件句柄的环境。context 是可修改流的行为的一套选项。
        	 */
        	//重命名   目录路径   域名/install/index.php    备份文件      域名/install/index.php.bak
            @rename("../install/index.php", "../install/index.php.bak");
        }
        //判断安装的module-install.php存在        目录路径   域名/install/index.php
        if( file_exists("../install/module-install.php") ) {
        	//重命名   目录路径   域名/install/module-install.php    备份文件      域名/install/module-install.php.ba
            @rename("../install/module-install.php", "../install/module-install.php.bak");
        }
        //定义文件路径         目录路径   域名/install/index.html
    	$fileindex = "../install/index.html";
    	//判断  文件路径文件是否存在
    	if( !file_exists($fileindex) ) {
    		//用可写的方式打开文件
    		$fp = @fopen($fileindex,'w');
    		//写入dir
    		fwrite($fp,'dir');
    		//关闭
    		fclose($fp);
    	}
    }
    
    //更新服务器文件      目录路径   域名/data/admin/config_update.php
    require_once (DEDEDATA.'/admin/config_update.php');
    
    //如果 $dopost=='showad'
    if ($dopost=='showad')
    {	//引入登陆界面的广告
        include('templets/login_ad.htm');
        exit;
    }
    
    //检测后台目录是否更名       GetCurUrl() 获得当前的脚本网址
    $cururl = GetCurUrl();
    //匹配正则     进行正则表达式匹配。并且只匹配一次
    /**
     * int preg_match( string pattern, string subject [, array matches [, int flags]] )
     * 在 subject 字符串中搜索与pattern给出的正则表达式相匹配的内容。
     * 如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
     * flags 可以是下列标记:
     * PREG_OFFSET_CAPTURE如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自PHP 4.3.0 起可用。
     * flags 参数来自 PHP 4.3.0 起可用。
     * preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。如果出错 preg_match() 返回FALSE。
     */
    if(preg_match('/dede\/login/i',$cururl))
    {
        $redmsg = '<div class=\'safe-tips\'>您的管理目录的名称中包含默认名称dede,建议在FTP里把它修改为其它名称,那样会更安全!</div>';
    }
    else
    {
        $redmsg = '';
    }
    
    //登录检测
    $admindirs = explode('/',str_replace("\\",'/',dirname(__FILE__)));
    $admindir = $admindirs[count($admindirs)-1];
    //以下是点击登陆按钮的时候执行的
    if($dopost=='login')
    {
        $validate = empty($validate) ? '' : strtolower(trim($validate));
        //获取验证码的session值   GetCkVdValue()
        $svali = strtolower(GetCkVdValue());
        if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){
            //php版本有bug时候执行
        	ResetVdValue();
            ShowMsg('验证码不正确!','login.php',0,1000);
            exit;
        } else {
        	//new一个登陆的对象
            $cuserLogin = new userLogin($admindir);
            //判断userid和pwd不为空
            if(!empty($userid) && !empty($pwd))
            {	//checkUser  检验用户是否正确
                $res = $cuserLogin->checkUser($userid,$pwd);
    
                //success
                if($res==1)
                {	// keepUser保持用户的会话状态
                    $cuserLogin->keepUser();
                    if(!empty($gotopage))
                    {
                        ShowMsg('成功登录,正在转向管理管理主页!',$gotopage);
                        exit();
                    }
                    else
                    {
                        ShowMsg('成功登录,正在转向管理管理主页!',"index.php");
                        exit();
                    }
                }
    
                //error
                else if($res==-1)
                {
    				ShowMsg('你的用户名不存在!',-1,0,1000);
    				exit;
                }
                else
                {
                    ShowMsg('你的密码错误!',-1,0,1000);
    				exit;
                }
            }
    
            //password empty
            else
            {
                ShowMsg('用户和密码没填写完整!',-1,0,1000);
    			exit;
            }
        }
    }
    
    //引入登陆模板  目录路径  域名/dede/templets/login.htm
    include('templets/login.htm');
    

      

  • 相关阅读:
    UC将发布高性能HTML5游戏引擎XCanvas
    一台晚会3.15拯救不了这些高科技公司
    4G时代更有利于TDD的发展
    【leetcode】Binary Tree Zigzag Level Order Traversal
    四月电商价格战火重燃 服务为决胜之道
    linux sysfs(3)
    ubuntu gedit 中文显示乱码解决方法
    研究人员将Windows Phone 7和Windows Azure推广到平流层的大气污染研究中
    迁移周系列II/II: On Premises 迁移视频
    玩Rock, Paper, Azure Challenge,赢取免费Kinect和Xbox 360!
  • 原文地址:https://www.cnblogs.com/heyubingfeng/p/3008402.html
Copyright © 2011-2022 走看看