专栏首页Android自学ThinkPHP中登陆确认机制

ThinkPHP中登陆确认机制

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

[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();
		}	
	}

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

嗯,方法是不断改进的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Gazebo之创建一个小车

    背景:在一台已经搭建好gazebo的ubuntu系统。(此文是窗口操作,所有操作在终端中也可完成,终端操作方式不再叙述)

    用户1696846
  • PHP Web 木马扫描器

    用户1696846
  • 利用grafana让mysql数据生成饼图Pie Chart

    上次博文我们说到将mysql数据通过grafana框架展示出了折线图和柱状图,这次我们想要生成饼图。

    用户1696846
  • PHP+RabbitMQ实现消息队列的完整代码

    首先,从业务上来讲,我并不要求消息的100%接受率,并且,我需要结合php开发,RabbitMq相较RocketMq,延迟较低(微妙级)。至于ActiveMq,...

    砸漏
  • JavaScript 类完整指南

    在 JavaScript 中不存在 Java 或 Swift 等语言中所使用的作为创建对象 蓝图的传统类,原型继承仅处理对象。

    疯狂的技术宅
  • jQuery中调用JSON和XML数据--jQuery基础知识点(6)

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛
  • 动手实现一个AMD模块加载器(三)

    在上一篇文章中,我们的AMD模块加载器基本已经能够使用了,但是还不够,因为我们没有允许匿名模块,以及没有依赖等情况。实际上在amd的规范中规定的就是define...

    用户1515472
  • python 实战 登录注册

    py3study
  • Jsp技术介绍

    roobtyan
  • mongodb的基本使用以及pymong的用法

    MongoDB 是由 C++ 语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似 JSON 对象,它的字段值可以包含其他文档...

    DC童生

扫码关注云+社区

领取腾讯云代金券