前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ThinkPHP中登陆确认机制

ThinkPHP中登陆确认机制

作者头像
用户1696846
发布2018-07-16 16:41:33
4400
发布2018-07-16 16:41:33
举报
文章被收录于专栏:Android自学Android自学Android自学

想边听边看就点播放按钮吧,我写这个的时候就是边听这个歌边整理的= =

[player autoplay="0"]

目的是做一个限制页面,取名首页(Index/index),如果没登陆过的话就跳转到登陆页面(Login/login)登陆,登录成功后跳转到首页。

其中的关键就是怎么判断是否登陆过。

最简单的是通过SESSION信息来判断是否已经登陆。

例如:首页的index方法写以下代码判断,并跳转登陆页面

//判断用户是否登陆过 通过SESSION

if(isset($_SESSION['username']) && $_SESSION['username']!=''){
			$this->display();
		}else{
			$this->redirect('Login/login');
		}

登陆页面的表单中包括username、password、verify(验证码)三项和登录按钮

登陆按钮的提交的代码如下,用来判断验证码和写入SESSION

//接受值 判断用户数据是否存在 存在 允许登陆 不存在 显示错误信息

$username=$_POST['username'];
		$password=$_POST['password'];
		$code=$_POST['code'];
		if(!empty($_POST)){
		//验证码校验
		$verify = new \Think\Verify();
		if(!$verify->check($code)){
			$this->error('验证码错误');
		} 
		$m=M('User');
		$where['username']=$username;
		$where['password']=$password;
		$i=$m->field('id')->where($where)->find();
		
		
		if($i){
				$_SESSION['username']=$username;
				$_SESSION['id']=$i['id'];
				$this->success('用户登陆成功',U('Index/index'));
			}else{
				$this->error('该用户不存在');
			}
		}

就是这么简单^_^

注:跳转中直接使用redirect方法即可,如果想要个缓冲页,可使用success和error方法,但是success方法的跳转页面一定要用U方法重置一下地址,如果按照手册里面的写会显示方法不存在。


修改日期04/01/2015 19:42:59

以上方法实现上是没问题的,但是在实际使用中有sql注入的风险。

<?php 
	namespace Admin\Model;
	use Think\Model;
	class ManagerModel extends Model{
		function checkNamePwd($name,$pwd){
			//第一步现根据$name查询是否有此记录
			//select * from sw_manager where mg_name=$name.
			//或者select() find()
			//或者根据指定字段进行查询,getByXXX(),例如getByMg_name($name),父类Model__call封装的方法
			$info = $this -> getByMg_name($name);
			//$info=null 说明用户名错误
			//$info = 一维数组 用户名正确
			if ($info != null) {
				//验证密码
				if ($info['mg_pwd'] !=$pwd) {
					return false;
				}else{
					return $info;
				}
			} else {
				return false;
			}
			
		}
	}
?>
	if (!empty($_POST)) {
			$verify = new \Think\Verify(); 
			if(!$verify->check($_POST['captcha'])){
				echo "验证码错误";
			}else{
				$user=D('Manager');
				$rst=$user->checkNamePwd($_POST['mg_username'],$_POST['mg_password']);
				if ($rst === false) {
					echo "用户名或密码错误";
				} else {
					//登录信息持久化
					session('mg_username',$rst['mg_name']);
					session('mg_id',$rst['mg_id']);
					//页面跳转到首页
					$this->redirect('Index/index');
				}
				
			}
		} else {
			//判断用户名密码,在Model里面制作一个专门的方法来验证。
			$this->display();
		}	
	}

现在通用的流行方法是先查询用户名是否存在,若不存在,提示错误,如果存在,则将数据库里面的密码信息和用户输入的信息比对,出结果。

嗯,方法是不断改进的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档