PHP验证码[,PHP检验码][,PHP校验码][,PHP生成验证码][,PHP获取验证码]
2017-02-21 00:00
405 查看
前言
最近分析ThinkPHP开源框架源码,下面给大家带来分享一段来着其内部的验证码生成与应用的解析,也算是一种自我总结吧。耐心阅读博文您可以获得如下【3本经验书】以及一份【验证码Demo实例】:1.为什么需要验证码
2.验证码是如何生成的
3.在项目里,验证码是如何工作的
Demo地址:https://pan.baidu.com/s/1o7H3xzG 密码:gtbc
为什么需要验证码
现在很多应用或者网址登录注册时都加入了验证码这一环节的检验。如手机,图片,操作等验证码,如下图:图片验证码:
![](https://static.oschina.net/uploads/space/2017/0222/162824_xBvP_2484485.png)
手机验证码:
![](https://static.oschina.net/uploads/space/2017/0222/163119_WMRg_2484485.png)
操作验证码:
![](https://static.oschina.net/uploads/space/2017/0222/162946_Otaf_2484485.png)
虽然它们的获取方式各自不同但宗旨还是一样,就是防止机器恶意注册登录。
验证码是如何生成的
第一步:二话不说直接下载DEMO运行https://pan.baidu.com/s/1o7H3xzG 密码:gtbc
第二步:
执行运行后生成验证码如下图范例效果:
![](https://static.oschina.net/uploads/space/2017/0222/224915_DSqW_2484485.png)
DEMO的访问URL地址以及验证码图中都有了,点击验证码图片可以随意切换验证码
第三步:
第二步如果顺利的话就可以看到上图中的验证码了,那么它是如何生成的呢?
关于生成的代码这里就不贴出来了,DEMO中本人已注释明确。代码已经过测试,逻辑方面已无问题如果执行报错可能就是环境的问题。比如你的PHP没开启相关图像操作的扩展。毕竟验证码是生成过程中调用的是PHP图片操作的扩展
在项目里,验证码是如何工作的
如果第二步你顺利通过了,那么恭喜你说明你的环境也没问题。接下来就给大家简单的剖析验证码在项目中的应用过程第一步:在验证码生成的时候,把生存出来的验证码进行加密,最后以加密密钥与自定义id组合为SESSION键存入SESSION中。代码见下图(该段代码出处是DEMO中的Verify.php文件中的170行-177行)
![](https://static.oschina.net/uploads/space/2017/0222/230750_k6Hr_2484485.png)
第二步:第一步完成之后我们的页面就展示出了一个验证码了。其实这个时候系统的session中已经保存了验证码的加密Code。当用户输入验证码后并点击登录。验证码的明文就会传到后端,后端接受到验证码并已相同的加密方式加密然后与SESSION中的验证码对比,如果正确则返回true。代码见下图(该段代码出处是DEMO中的Verify.php文件中的77行-97行)
![](https://static.oschina.net/uploads/space/2017/0222/232522_isbM_2484485.png)
结束语
到这里就大致的勾勒了一下关于验证码的生成和使用方法了。本文阐述的内容比较简单,Demo的例子可以直接快速应用在现实的项目中。如果想深入学习该类的设计思想就自行阅读DEMO代码,毕竟设计思想才是精髓所在。希望本文对同胞们有所帮助,谢谢大家~相关文章推荐
- PHP生成验证码+session获取存储验证码
- PHP GD 生成图片验证码+session获取储存验证码
- PHP GD 生成图片验证码+session获取储存验证码
- php 使用GD库生成验证码
- PHP生成带有雪花背景的验证码
- 个人技术作品 - PHP 验证码生成类
- PHP生成图形验证码
- PHP生成带有雪花背景的验证码
- php 生成验证码
- 使用php生成验证码
- 改进的php验证码生成程序
- php生成SessionID和图片校验码的思路和实现
- php生成SessionID和图片校验码的思路和实现
- php生成SessionID和图片校验码的思路和实现代码
- php生成SessionID和图片校验码的思路和实现代码
- PHP生成带有雪花背景的验证码
- PHP生成带有雪花背景的验证码
- php程序如何生成验证码图片
- php生成SessionID和图片校验码的思路和实现
- 生成验证码,同时异步获取加密后的验证码