很多注册登录界面都会验证码,用tp如何实现验证码的功能呢?

在tp中:Think\Verify类可以支持验证码的生成和验证功能。

首先,看一下逻辑:

(1)如何生成?------ 先做Yanzhengma控制器,调用Yanzheng操作方法显示页面;

(2)如何生成?------ 显示页面的图片路径要指向当前控制器下面的yzm操作方法,用于生成验证码;

(3)如何验证?------ 点击“验证”按钮,用ajax访问当前控制器下面的yz操作方法,进行验证;

(4)如何刷新验证码?----- 点击图片再次获取路径;

(5)多个验证码如何验证? ------- 在生成验证码时,就给一个标识;

(6)控制验证码的属性 ------ 字体大小、背景图片、中英文等

 第一步:生成验证码

yanzheng.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="__ROOT__/Public/js/jquery-1.11.2.min.js"></script>
</head>
<body>
<!--a,c,m-->
<h1>验证码</h1>
<img src="__CONTROLLER__/yzm">
<input type="text" name="yzm" id="txt"/>
<input type="button" value="验证" id="btn" />
</body>
</html>

  YanzhengmaController.clas

<?php

namespace Ceshi\Controller;
use Think\Controller;
class YanzhengmaController extends Controller
{
public function yanzheng()
{
$this->show();
}
public function yzm(){ //清除缓存,显示验证码,有的不用写这就话就可以显示验证码,我的不行,所以写上了
ob_clean();
$v = new \Think\Verify();
$v->entry();
} }

  

  

第二步:判断验证码

yanzheng.html

<script type="text/javascript">
$("#btn").click(function(){
var yzm = $("#txt").val();
$.ajax({
url:"__CONTROLLER__/yz", //传值路径
data:{yzm:yzm},
type:"POST",
dataType:"TEXT",
success:function(data){
if(data.trim()=="OK"){
alert("验证码输入成功!"); }else{
alert("验证码输入不正确!");
}
}
})
})
</script>

  YanzhengmaController.class.php

public function yz(){
//取值
$yzm = $_POST["yzm"];
$v = new \Think\Verify();
//check()方法检验验证码是否正确
if($v->check($yzm)){
$this->ajaxReturn("OK","eval"); //如果正确,返回ok
}else{
$this->ajaxReturn("NO","eval"); //如果不正确,返回no
        }
}

  效果图:

当输入不正确的验证码时:

当输入正确的验证码时:

第三步:实现点击验证码图片进行刷新

	$("img").click(function(){

			$(this).attr("src","__CONTROLLER__/yzm");
})

  

给图片加上点击事件,每次点击图片重新传一次地址;这样便可以实现刷新了,但是这一代码在ie浏览器中不行:

原因:ie浏览器会自动识别相同的路径,如果相同会直接加载缓存文件,因此需要每次传的路径不同,用随机数做

		$("img").click(function(){
//取随机数
var sjs = Math.floor(Math.random()*100);
$(this).attr("src","__CONTROLLER__/yzm/code/"+sjs);
})

  

第四步:如何进行多个验证码的验证?

当有多个验证码时,

yanzheng.html

	<h1>验证码</h1>
<img src="__CONTROLLER__/yzm" id="img">
<input type="text" name="yzm" id="txt"/>
<input type="button" value="验证" id="btn" />
<br /><br />
<!--第二个验证码-->
<img src="__CONTROLLER__/yzm2" id="img">

  在生成验证码时:要传入可标识的信息

YanzhengmaController.class.php

		public function yzm(){
ob_clean();
$v = new \Think\Verify();
$v->entry(1);
}
public function yzm2(){
ob_clean();
$v = new \Think\Verify();
$v->entry(2);
}

  

判断验证码时;将标识写入check($yzm,):

	public function yz(){
//取值
$yzm = $_POST["yzm"];
$v = new \Think\Verify();
//check()方法检验验证码是否正确
if($v->check($yzm,2)){
$this->ajaxReturn("OK","eval"); //如果正确,返回ok
}else{
$this->ajaxReturn("NO","eval"); //如果不正确,返回no
}
}

  

这样就可以区别要验证的是哪一个验证码了。

第五步:对验证码属性进行修改(切换中文)

public function yzm(){
ob_clean();
$v = new \Think\Verify();
$v->useImgBg =true; //是否启用默认背景,默认false
$v->fontSize = 30; //验证码字体大小(像素) 默认为25
$v->useCurve = false; //是否使用混淆曲线 默认为true
$v->useNoise = false; //是否添加杂点 默认为true
$v->imageW = 250; //验证码宽度 设置为0为自动计算
$v->imageH = 80; //验证码高度 设置为0为自动计算
//切换中文
//首先就中文字体(格式是ttf)的移动到Library/Think/Verify/zhttfs文件夹中
$v->useZh = true; //是否使用中文验证码
$v->fontttf = "simhei.ttf"; //指定验证码字体 默认为随机获取 $v->entry();
}

  

注:在Verify.class.php中可以修改要随机显示的英文和中文字:

其中,codeSet 是英文; zhSet 是中文;如果想要使生成的验证码是自己喜欢的英/中文文章里的文字,可以在此处修改。

tp框架---验证码详解的更多相关文章

  1. Hadoop 新 MapReduce 框架 Yarn 详解

    Hadoop 新 MapReduce 框架 Yarn 详解: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ Ap ...

  2. 测试框架mochajs详解

    测试框架mochajs详解 章节目录 关于单元测试的想法 mocha单元测试框架简介 安装mocha 一个简单的例子 mocha支持的断言模块 同步代码测试 异步代码测试 promise代码测试 不建 ...

  3. 转: javascript模块加载框架seajs详解

    javascript模块加载框架seajs详解 SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加 ...

  4. Android热门网络框架Volley详解[申明:来源于网络]

    Android热门网络框架Volley详解[申明:来源于网络] 地址:http://www.cnblogs.com/caobotao/p/5071658.html

  5. 【python3+request】python3+requests接口自动化测试框架实例详解教程

    转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...

  6. python+requests接口自动化测试框架实例详解

    python+requests接口自动化测试框架实例详解   转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...

  7. redux-saga框架使用详解及Demo教程

    redux-saga框架使用详解及Demo教程 前面我们讲解过redux框架和dva框架的基本使用,因为dva框架中effects模块设计到了redux-saga中的知识点,可能有的同学们会用dva框 ...

  8. tp框架 验证码的应用注意事项

    1如何点击更换二维码 二维码是img标签的src访问生成二维码的方法.绑定点击事件,ajax的get方式请求生成二维码的函数.在U函数后面加上任意不重复的参数 如  ?rand=’+math.rand ...

  9. Quartz.net开源作业调度框架使用详解

    前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ...

随机推荐

  1. 开涛spring3(5.1&5.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础

    5.1  概述 5.1.1  概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行 ...

  2. SharePoint 服务器端对象迁移文件夹

    最近有个需求,写个定时迁移文件夹的小程序,因为计时器任务比较繁琐,所以选择了控制台程序.然后,用windows的计划任务执行,也许,会有广大朋友需要类似的功能,简单的分享一下代码逻辑,功能非常简单,希 ...

  3. webpack务虚扫盲

    打包工具的角色 所谓打包工具在web开发中主要解决的问题是: (1)文件依赖管理.毕竟现在都是模块化开发,打包工具首先就是要梳理文件之间的依赖关系. (2)资源加载管理.web本质就是html.js和 ...

  4. poj2069

    poj2069 题意 求一个覆盖所有点的最小球体的半径.即求空间内一点到所有点的距离的最大值最小的点. 分析 模拟退火算法,但这道题竟然不用随机函数就能过了,主要体现了算法的渐近收敛性, 起始点随意取 ...

  5. 16.3Sum Closet

    思路: 暴力,复杂度为 \(O(n^3)\),超时 class Solution { public: int threeSumClosest(vector<int>& nums, ...

  6. 音视频编解码问题:javaCV如何快速进行音频预处理和解复用编解码(基于javaCV-FFMPEG)

    前言: 前面我用了很多章实现了javaCV的基本操作,包括:音视频捕捉(摄像头视频捕捉和话筒音频捕捉),推流(本地音视频或者摄像头话筒混合推流到服务器),转流(rtsp->rtmp),收流(录制 ...

  7. scrapy调试时出现 ImportError: No module named win32api

    windows下利用scrapy(python2.7)写爬虫,运行 scrapy crawl dmoz 命令时提示:exceptions.ImportError: No module named wi ...

  8. eclipse 更改官方配色

    打开Eclipse,help->Install new software, 输入 http://eclipse-color-theme.github.com/update,等待就OK了. 然后w ...

  9. springmvc 之 DispatcherServlet

    DispatcherServlet说明 使用Spring MVC,配置DispatcherServlet是第一步. DispatcherServlet是一个Servlet,所以可以配置多个Dispat ...

  10. [0] (VDP)垂直开发模式

    垂直管理 网格化管理 属地管理 横向管理 面向接口编程 面向对象编程(OOP) 设计模式(GOF.MVC.SOA) 依赖注入(DI/IoC) 面向方面编程(AOP) 领域驱动开发(DDD) 测试驱动开 ...