前言
最近分析ThinkPHP开源框架源码,下面给大家带来分享一段来着其内部的验证码生成与应用的解析,也算是一种自我总结吧。耐心阅读博文您可以获得如下【3本经验书】以及一份【验证码Demo实例】:
1.为什么需要验证码
2.验证码是如何生成的
3.在项目里,验证码是如何工作的
Demo地址:https://pan.baidu.com/s/1o7H3xzG 密码:gtbc
为什么需要验证码
现在很多应用或者网址登录注册时都加入了验证码这一环节的检验。如手机,图片,操作等验证码,如下图:
图片验证码:

手机验证码:
操作验证码:
虽然它们的获取方式各自不同但宗旨还是一样,就是防止机器恶意注册登录。
验证码是如何生成的
第一步:二话不说直接下载DEMO运行
https://pan.baidu.com/s/1o7H3xzG 密码:gtbc
第二步:
执行运行后生成验证码如下图范例效果:
DEMO的访问URL地址以及验证码图中都有了,点击验证码图片可以随意切换验证码
第三步:
第二步如果顺利的话就可以看到上图中的验证码了,那么它是如何生成的呢?
关于生成的代码这里就不贴出来了,DEMO中本人已注释明确。代码已经过测试,逻辑方面已无问题如果执行报错可能就是环境的问题。比如你的PHP没开启相关图像操作的扩展。毕竟验证码是生成过程中调用的是PHP图片操作的扩展
在项目里,验证码是如何工作的
如果第二步你顺利通过了,那么恭喜你说明你的环境也没问题。接下来就给大家简单的剖析验证码在项目中的应用过程
第一步:在验证码生成的时候,把生存出来的验证码进行加密,最后以加密密钥与自定义id组合为SESSION键存入SESSION中。代码见下图(该段代码出处是DEMO中的Verify.php文件中的170行-177行)
第二步:第一步完成之后我们的页面就展示出了一个验证码了。其实这个时候系统的session中已经保存了验证码的加密Code。当用户输入验证码后并点击登录。验证码的明文就会传到后端,后端接受到验证码并已相同的加密方式加密然后与SESSION中的验证码对比,如果正确则返回true。代码见下图(该段代码出处是DEMO中的Verify.php文件中的77行-97行)
结束语
到这里就大致的勾勒了一下关于验证码的生成和使用方法了。本文阐述的内容比较简单,Demo的例子可以直接快速应用在现实的项目中。如果想深入学习该类的设计思想就自行阅读DEMO代码,毕竟设计思想才是精髓所在。希望本文对同胞们有所帮助,谢谢大家~
转载于:https://my.oschina.net/u/2484485/blog/843171