thinkphp后台登录实例

原创
2016/05/31 23:29
阅读数 1.2K

1、入口文件:index.php

<?php

// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');

// 调试模式
define('APP_DEBUG',True);

// 应用目录
define('APP_PATH','./Application/');

// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';

2、配置文件

<?php
return array(
	//'配置项'=>'配置值'
	'URL_HTML_SUFFIX' => '',
	/* 数据缓存设置 */
    'DATA_CACHE_PREFIX'    => 'onethink_', // 缓存前缀
    'DATA_CACHE_TYPE'      => 'File', // 数据缓存类型
	/* 模板相关配置 */
    'TMPL_PARSE_STRING' => array(
        '__STATIC__' => __ROOT__ . '/Public/static',
        '__ADDONS__' => __ROOT__ . '/Public/' . MODULE_NAME . '/Addons',
        '__IMG__'    => __ROOT__ . '/Public/' . MODULE_NAME . '/images',
        '__CSS__'    => __ROOT__ . '/Public/' . MODULE_NAME . '/css',
        '__JS__'     => __ROOT__ . '/Public/' . MODULE_NAME . '/js',
    ),

	/* SESSION 和 COOKIE 配置 */
    'SESSION_PREFIX' => 'blog', //session前缀
    'COOKIE_PREFIX'  => 'blog_', // Cookie前缀 避免冲突
    'VAR_SESSION_ID' => 'session_id',	//修复uploadify插件无法传递session_id的bug

    /* 后台错误页面模板 */
    'TMPL_ACTION_ERROR'     =>  MODULE_PATH.'View/Public/error.html', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS'   =>  MODULE_PATH.'View/Public/success.html', // 默认成功跳转对应的模板文件
    'TMPL_EXCEPTION_FILE'   =>  MODULE_PATH.'View/Public/exception.html',// 异常页面的模板文件
);

3、登录页面:login.html

<form class="form-horizontal" action="{:U('login','','')}" role="form" method="post">
	<div class="form-group">
		<label for="username" class="col-sm-offset-1 col-sm-2 control-label">用户名:</label>
		<div class="col-sm-6">
			<input type="text" class="form-control" id="username" name="username" placeholder="用户名" required />
		</div>
	</div>

	<div class="form-group">
		<label for="password" class="col-sm-offset-1 col-sm-2 control-label">密 &nbsp; &nbsp;码:</label>
		<div class="col-sm-6">
			<input type="password" class="form-control" id="password" name="password" placeholder="密码"  required />
		</div>
	</div>

	<div class="form-group">
		<label for="verify" class="col-sm-offset-1 col-sm-2 control-label">验证码:</label>
		<div class="col-sm-6">
			<input type="text" class="form-control" id="verify" name="verify" placeholder="验证码"  required />
		</div>
	</div>

	<div class="form-group">
		<label for="" class="col-sm-offset-1 col-sm-2 control-label"></label>
		<div class="col-sm-6">
			<img src="{:U('verify')}" class="verifyimg reloadverify"/>
		</div>
	</div>

	<div class="form-group">
		<div class="col-sm-offset-3 col-sm-7">
			<button id="submit" type="submit" class="btn btn-primary btn-login">登陆</button>
		</div>
	</div>
	<div class="form-group">
		<p class="check-tips text-danger col-sm-offset-3 col-sm-7"></p>
	</div>

</form>
<script>
	//表单提交
	$(document)
		.ajaxStart(function(){
			$("button:submit").attr("disabled", true);
		})
		.ajaxStop(function(){
			$("button:submit").attr("disabled", false);
		});

	$("form").submit(function(){
		var self = $(this);
		$.post(self.attr("action"), self.serialize(), success, "json");
		return false;

		function success(data){
			if(data.status){
				window.location.href = data.url;
			} else {
				self.find(".check-tips").text(data.info);
				//刷新验证码
				$(".reloadverify").click();
			}
		}
	});
	$(function(){
		//初始化选中用户名输入框
		$("#login").find("input[name=username]").focus();
		//刷新验证码
		var verifyimg = $(".verifyimg").attr("src");
		$(".reloadverify").click(function(){
			if( verifyimg.indexOf('?')>0){
				$(".verifyimg").attr("src", verifyimg+'&random='+Math.random());
			}else{
				$(".verifyimg").attr("src", verifyimg.replace(/\?.*$/,'')+'?'+Math.random());
			}
		});
	});
</script>

4、登录处理:LoginController.class.php

    public function login($username = null, $password = null, $verify = null){
        if(IS_POST){
            /* 检测验证码 TODO: */
            if(!check_verify($verify)){
                $this->error('验证码输入错误!');
            }

            $db = M('user');
			$map['username'] = $username;
			$map['status'] = 1;
			$user = $db->where($map)->find();
			if(!$user){
				$this->error('帐号不存在或被禁用');
			}
			if($user['password'] != md5($password)){
				$this->error('密码错误');
			}

			$data = array(
				'uid'              => $user['uid'],
				'login'           => array('exp', '`login`+1'),
				'last_login_time' => NOW_TIME,
				'last_login_ip'   => get_client_ip(),
			);
			$db->save($data);

			/* 记录登录SESSION和COOKIES */
			$auth = array(
				'uid'             => $user['uid'],
				'username'        => $user['nickname'],
				'last_login_time' => $data['last_login_time'],
			);
			session('user', $auth);
			$this->success('登录成功!', U('Index/index'));

        } else {
            if(is_login()){
                $this->redirect('Index/index');
            }else{
                $this->display();
            }
        }
    }
	/* 退出登录 */
    public function logout(){
        if(is_login()){
			session('user', null);
            session('[destroy]');
            $this->success('退出成功!', U('login'));
        } else {
            $this->redirect('login');
        }
    }

    public function verify(){
		ob_end_clean();
        $verify = new \Think\Verify();
        $verify->entry();
    }
    // 检测输入的验证码是否正确,$code为用户输入的验证码字符串
    function check_verify($code, $id = ''){
       $verify = new \Think\Verify();
       return $verify->check($code, $id);
    }

5、判断是否登录公共方法

/**
 * 检测用户是否登录
 * @return integer
 */
function is_login(){
    $user = session('user');
    if (empty($user)) {
        return 0;
    } else {
        return $user['uid'];
    }
}

6、公共控制器

class CommonController extends Controller {
	public function _initialize(){
		// 获取当前用户ID
        define('UID',is_login());
        if( !UID ){// 还没登录 跳转到登录页面
            $this->redirect('Public/login');
        }
	}
}

 

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部