ThinkPHP实例—实现登录验证
ThinkPHP 验证
本篇我们将运用商城实例讲解一下如何运用ThinkPHP做一个登录验证
我们的框架目录结构如下图所示:

其中 app 文件夹就是我们的应用文件夹 它的目录结构如下所示
其中 Admin 就是我们商城后台登录模板的平台了

在这之前我们需要在Conf文件夹里的confg.php文件里配置一下我们平台的路径常量,方便我们在视图里引用CSS样式以及图片

confg.php文件里的代码如下:
<?php
return array(
//'配置项'=>'配置值'
SHOW_PAGE_TRACE => 0,
'TMPL_PARSE_STRING' =>array(
'__CSS__' => __ROOT__.'/app/Admin/Public/css/',// 设置css样式文件地址
'__IMG__' => __ROOT__.'/app/Admin/Public/img/'// 设置图片地址
), );
基于框架的MVC思路,
我们的视图文件夹详情 如下图所示

视图文件的代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta content="MSHTML 6.00.6000.16674" name="GENERATOR" /> <title>用户登录</title>
<link rel="stylesheet" type="text/css" href="__CSS__User_Login.css"/>
</head><body id="userlogin_body">
<div></div>
<div id="user_login">
<dl>
<dd id="user_top">
<ul>
<li class="user_top_l"></li>
<li class="user_top_c"></li>
<li class="user_top_r"></li></ul>
</dd><dd id="user_main">
<form action="__URL__/check" method="post">
<ul>
<li class="user_main_l"></li>
<li class="user_main_c">
<div class="user_main_box">
<ul>
<li class="user_main_text">用户名: </li>
<li class="user_main_input">
<input class="TxtUserNameCssClass" id="admin_user" maxlength="20" name="admin_user"> </li></ul>
<ul>
<li class="user_main_text">密 码: </li>
<li class="user_main_input">
<input class="TxtPasswordCssClass" id="admin_psd" name="admin_psd" type="password">
</li>
</ul>
<ul>
<li class="user_main_text">验证码: </li>
<li class="user_main_input">
<input class="TxtValidateCodeCssClass" id="captcha" name="captcha" type="text">
<img src="__URL__/check_num" onClick="this.src='__URL__/check_num/'+Math.random()" /> <--这里的点击事件是重新请求一遍验证码,拼接 Match.random()是为了确保浏览器每次都刷新-->
</li>
</ul>
</div>
</li>
<li class="user_main_r"> <input style="border: medium none; background: url('__IMG__user_botton.gif') repeat-x scroll left top transparent; height: 122px; width: 111px; display: block; cursor: pointer;" value="" type="submit">
</li>
</ul>
</form>
</dd><dd id="user_bottom">
<ul>
<li class="user_bottom_l"></li>
<li class="user_bottom_c"><span style="margin-top: 40px;"></span> </li>
<li class="user_bottom_r"></li></ul></dd></dl>
<input type="hidden" value="__APP__" >
</div><span id="ValrUserName" style="display: none; color: red;"></span><span id="ValrPassword" style="display: none; color: red;"></span><span id="ValrValidateCode" style="display: none; color: red;"></span>
<div id="ValidationSummary1" style="display: none; color: red;"></div>
</body>
</html>
我们的登录控制器是这样的:

代码和注释如下:
<?php
//声明命名空间
namespace Admin\Controller;
use Think\Controller;//启用基础控制器类
use Think\Verify;//启用验证码类
/*Admin模块的login控制器*/
class LoginController extends Controller{
public function login(){
$this->display();//调用模板显示登录界面
} //登录验证的方法
public function check(){
$uid = $_POST['admin_user'];//接收前台的uid
$pwd = $_POST['admin_psd'];//接收用户的密码
$check_num = $_POST['captcha'];//接收验证码
//验证码的验证
$check_num_obj=new Verify();//实例化验证码类
if(!$check_num_obj->check($check_num)){//实例调用验证码类本身的检查方法检验用户输入的验证码是否和生成的匹配
$this->error("验证失败",U("login"),3);//如果不匹配提示验证失败,跳转到登录界面
} $data = M('users')->select($uid);//实例化User表,根据用户的uid返回该用户的信息(这里是一个二维数组)
//var_dump($data);
if($pwd == $data[0]["password"] && $pwd !=""){//如果密码正确且不为空
$this->redirect('Manager/index',array(),2,'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />登录成功!');//提示登陆成功跳转到管理界面(这里的array()可用于传参数)
}else{
$this->redirect('Login/login',array(),2,'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />登录失败!');//提示登录失败 再次返回到登录界面
} } function check_num(){//产生登录验证码的方法
$config = array(//配置信息的关联数组
'useImgBg' => false, // 使用背景图片
'fontSize' => 15, // 验证码字体大小(px)
'useCurve' => true, // 是否画混淆曲线
'useNoise' => true, // 是否添加杂点
'imageH' => 30, // 验证码图片高度
'imageW' => 120, // 验证码图片宽度
'length' => 5, // 验证码位数
'fontttf' => '1.ttf', // 验证码字体,不设置随机获取
'bg' => array(243, 251, 254), // 背景颜色
'reset' => true // 验证成功后是否重置
);
$check_num_obj=new Verify($config);//实例化生成验证码的类
$check_num_obj->entry();//调用该类显示验证码的方法
//输出验证码并把验证码的值保存的session中
//验证码保存到session的格式为: array('verify_code' => '验证码值', 'verify_time' => '验证码创建时间');
}
好了,到现在基本的设置已经完成了
让我们试一试吧
先打开登录界面

输入用户名和密码和验证码 点击登录

OK 我们的登录验证完成啦
后续功能我们逐步完善
对于不理解的代码,欢迎随时来骚扰我们一起探讨!!!
ThinkPHP实例—实现登录验证的更多相关文章
- Shiro安全框架入门篇(登录验证实例详解与源码)
转载自http://blog.csdn.net/u013142781 一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和J ...
- ThinkPHP之登录验证
验证方面写的不是很完整,正在完善当中 <?php /** * Created by dreamcms. * User: Administrator * Date: 2016/9/5 * Time ...
- express+nodecoffee写passport登录验证实例(一)
项目中要用到passport登录验证,环境如标题样:express框架,coffee模版引擎,node后台 一:建项目 直接用express命令建,虽然默认模版为jade,可以手动换成coffee哦. ...
- 自定义Django中间件(登录验证中间件实例)
前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰 ...
- Django框架登录验证及产生随机验证码的实例
1:views视图代码 # 登录验证 def login(request): # 使用ajax请求可以使用判断 # if request.is_ajax(): if request.method == ...
- ASP.NET MVC 登录验证
好久没写随笔了,这段时间没 什么事情,领导 一直没安排任务,索性 一直在研究代码,说实在的,这个登录都 搞得我云里雾里的,所以这次我可能也讲得不是 特别清楚,但是 我尽力把我知道的讲出来,顺便也对自 ...
- nodeJS---express4+passport实现用户注册登录验证
网上有很多关于passport模块使用方法的介绍,不过基本上都是基于express3的,本文介绍在express4框架中使用passport模块. 前言 passport是一个功能单一,但非常强大的一 ...
- C# mvc中为Controller或Action添加定制特性实现登录验证
在本文开始前,先简单讲两个知识点: 1.每个action执行前都会先执行OnActionExecuting方法: 2.FCL提供了多种方式来检测特性的存在,比如IsDefined.GetCustomA ...
- 如何使用新浪微博账户进行应用登录验证(基于Windows Azure Mobile Service 集成登录验证)
使用三方账号登录应用应该对大家来说已经不是什么新鲜事儿了,但是今天为什么还要在这里跟大家聊这个话题呢,原因很简单 Windows Azure Mobiles Service Authenticatio ...
随机推荐
- react 问题
安装依赖报错问题 可能需要按顺序安装, 不能cnpm npm 混合安装, 参考react项目入门 react an ...
- Device-Dependent Bitmaps (DDB) 设备相关位图
设备相关的位图(DDB)使用单一结构BITMAP结构描述.该结构的成员指定矩形区域的宽度和高度,以像素为单位;将条目从设备调色板映射到像素的数组的宽度;以及器件的颜色格式,在每个像素的颜色平面和位数方 ...
- Java property 的加载读取
方法一 Properties properties = new Properties(); InputStream stream = PropertiesUtil.class.getClassLoad ...
- KL散度(Kullback-Leibler_divergence)
KL散度(Kullback-Leibler_divergence) 一. 概念 KL-divergence,俗称KL距离,常用来衡量两个概率分布的距离. 根据shannon的信息论,给定一个字符集的概 ...
- JMter中添加断点和关联
一. 断点 断言是什么呢,它是用来检查返回结果对不对的. 用来验证结果是否正确,如果正确的话,就代表这个请求的返回是正确的,如果没有的话就代表这个请求的结果和我们预期的不一致,这 ...
- 基于Ubuntu16.04的GeForce GTX 1080驱动安装,遇到的问题及对应的解决方法
1.在主机上插上GPU之后,查看设备: $ nvidia-smi Tue Dec :: +------------------------------------------------------- ...
- 【paper】KDD15 - Interpreting Advertiser Intent in Sponsored Search
Interpreting Advertiser Intent in Sponsored Search 主要内容是搜索广告的相关性预估模型,使用learning to rank的方法.亮点在于使用了 ...
- Error measure
Noise 在x和y都可能有noise 对于没有noise的情况,x~P(x), f(x)=h(x),但是如果现在有noise,x~P(x), y~P(y|x)(y是真正的label,只是一定概率上会 ...
- JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用
下面把项目中的用户类中有个:一对一 一对多 多对多的注解对应关系列取出来用于学习 说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...
- js判断当前浏览类型
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串var isOpera = userAgent.indexOf("Opera ...