文档章节

thinkphp后台登录实例

麦社
 麦社
发布于 2016/05/31 23:29
字数 781
阅读 122
收藏 1

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

 

© 著作权归作者所有

上一篇: 1、H5视频<video>
下一篇: php无限分类
麦社
粉丝 0
博文 7
码字总数 6373
作品 0
长沙
私信 提问
thinkphp_图片上传裁剪功能_已迁移

准备材料 THINKPHP jQuery表单插件 cropper 裁剪插件 思路: 利用THINKPHP上传文件类与图片裁剪类,前台想办法组合参数给后台 那怎么样可以异步提交文件呢 关键就是 jquery表单插件了 后台准...

辣条拌鱼翅
2015/09/25
4.1K
1
Thinkphp 3.1.2 视频教程震撼上线

期待已久的TP视频教程,经千呼、历万唤,经由TP团队和Lamp兄弟连联合精心制作,正式隆重登场了,这里有最专业的导师,这里有最权威的TP知识,这里有最强大的TP技术团队,在这里,就让我们通过...

麦当苗儿
2013/04/25
5K
30
ThinkPHP3.0新特性: 快捷查询

新版增加了快捷查询方式,可以进一步简化查询条件的写法,例如: 一、实现不同字段相同的查询条件 $User = M("User"); // 实例化User对象 $map['name|title'] = 'thinkphp'; // 把查询条件传......

岭南六少
2012/02/27
437
0
thinkphp使用Ueditor编辑器写入数据库单双引号转义问题

http://www.poluoluo.com/jzxy/201208/172927.html thinkphp使用Ueditor编辑器写入数据库单双引号转义问题 Posted by 萧猫on 十二月 18, 2013 开发备忘/语录 在ThinkPHP中提交表单插入数据的...

KavenSu
2014/06/27
2K
0
WSTMall 更新至 V1.1.1_150711,大幅修改

自WSTMall发布以来,我们收到很多支持WSTMall的朋友通过不同渠道的反馈,WSTMall本次更新重点放在了稳定原有功能、修复系统BUG,并未新增很多新的功能,我们希望把本系统的体验性提升,本程序...

B2B2C商城系统
2015/07/13
1K
10

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot-MVC RequestBody中LocalDateTime的自适应配置

请求的json报文中可能会出现 一下几种: ['2019-01-01','2019-01-01 12:03:34','20190101120334'] 但是接收的Request实体类日期字段是LocalDateTime类型 LocalDateTime applyDate; 希望的情况......

汉堡OSC
34分钟前
5
0
小招喵所在的国家正处于怪兽入侵的战场中,这个国家一共有n+1个城市

import java.util.Arrays; import java.util.Scanner; public class test3 { public static long max=0;public static void main(String[] args) { Scanner sc = new Scanner(System.i......

南桥北木
36分钟前
4
0
活动策划思维导图模板分享,怎样绘制思维导图操作方法介绍

对于一场活动的举办可以事先使用思维导图简略的将整个过程进行总结归纳使用,这样清晰的思维导图即利于工作的进行,也可以清晰明了了熟悉整个过程,下面是为大家分享的几款活动策划思维导图模...

干货趣分享
42分钟前
5
0
Android高级xml布局之输入框EditText设计

今天给大家介绍一下如何实现一款简约时尚的安卓登陆界面。大家先看一下效果图 当用户输入时动态出现删除按钮 现在先罗列一下技术点: 1.如何使用圆角输入框和按钮背景 2.如何实现“手机号”、...

shzwork
今天
4
0
RxJava进行单元测试的方式

@Test public void completeTask_retrievedTaskIsComplete() { // Given a new task in the persistent repository final Task newTask = new Task(TITLE, ""); ......

SuShine
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部