二、后台登陆login.php【dedecms后台源码分析】

<?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');

  

你可能感兴趣的:(dedecms)