ThinkPHP中登陆确认机制

2018-07-16 16:41:33 浏览数 (1)

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

代码语言:javascript复制
[player autoplay="0"]

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

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

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

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

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

代码语言:javascript复制
if(isset($_SESSION['username']) && $_SESSION['username']!=''){
			$this->display();
		}else{
			$this->redirect('Login/login');
		}

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

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

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

代码语言:javascript复制
$username=$_POST['username'];
		$password=$_POST['password'];
		$code=$_POST['code'];
		if(!empty($_POST)){
		//验证码校验
		$verify = new ThinkVerify();
		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注入的风险。

代码语言:javascript复制
<?php 
	namespace AdminModel;
	use ThinkModel;
	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;
			}
			
		}
	}
?>
代码语言:javascript复制
	if (!empty($_POST)) {
			$verify = new ThinkVerify(); 
			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();
		}	
	}

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

嗯,方法是不断改进的。

0 人点赞