验证码(Captcha)的两种校对机制
文章目录
- 前言
- 两种验证机制
- 状态验证码
- 无状态验证码
前言
Captcha,中文全称为全自动区分计算机和人类的图灵测试,在实际使用中常常以验证码的形式出现在人们的视野中,即通过展示一张图片,要求用户输入图片中的字符,以此来验证用户是否为人类。
验证码一般的校对流程为:验证码图片由后端生成,传输至前端,前端接受用户的输入,再发送给后端校对。但这其中就出现了问题,如何匹配用户输入和正确的验证码?
两种验证机制
如何匹配用户输入和正确的验证码?
有两种方法:
- 将正确的验证码与会话绑定,这里姑且将这种验证码称为“状态验证码”。
- 将正确的验证码与键名绑定,这里姑且将这种验证码称为“无状态验证码”。
状态验证码
当访问某个网页的时候,服务器会在服务器端的内存里开辟一块内存,这块内存就叫做 session
,session
与通过 cookie
与当前会话绑定。
状态验证码将正确的验证码存入 session
中,下面是一个简单的例子:
后端生成字符为abcd的验证码图片,并向 session
中存入键值对
"captcha"=>"abcd"
在接受用户输入后,服务端取出Session中的 capcha
值 abcd
,与用户输入进行比较,并返回比较结果。
无状态验证码
状态验证码将键值对存在 session
中,无状态验证码则将键值对存于缓存(Cache)中,但是缓存是所有会话共用的,所以需要生成唯一键名,并将键名与生成的图片一起提交至前端,前端返回用户输入的时候也应该同时返回这个键名。
下面是个简单例子:
后端生成字符为abcd的验证码图片,并生成键值对
"$332hj5ghjk21h3jYU"=>"abcd"
同时将键名 $332hj5ghjk21h3jYU
与图片一起发送至前端。
前端接受用户输入后,返回后端的信息如下
{captcha: "用户的输入",key: "$332hj5ghjk21h3jYU"
}
服务端取出 key
后,再利用 key
从缓存中取出正确的验证码,与用户的输入进行比较,返回比较结果。
无状态验证码需要注意的一个点:在更新验证码时,用户可能会阻止 key 的更新,借此达成只输入一次验证码就可以重复提交表单,所以我们需要在后端每次验证完毕后,销毁缓存中对应的键值对。
验证码(Captcha)的两种校对机制相关推荐
- 一文看懂 Bahdanau 和 Luong 两种 Attention 机制的区别
来自 | 知乎 作者 | Flitter 链接 | https://zhuanlan.zhihu.com/p/129316415 编辑 | 深度学习这件小事公众号 本文仅作学术交流,如有侵权,请联系 ...
- ReentrantLock和synchronized两种锁定机制
ReentrantLock和synchronized两种锁定机制 应用synchronized同步锁 把代码块声明为 synchronized,使得该代码具有 原子性(atomicity)和 可见性( ...
- Spring AOP两种实现机制是什么?
Spring AOP两种实现机制是什么? 1.如果是有接口声明的类进行AOP 时,spring调用的是java.lang.reflection.Proxy 类来做处理 2.如果是没有接口声明的类时, ...
- Redis中两种持久化机制RDB和AOF
redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Ap ...
- SimpleApp例程中两种绑定机制程序流程
来自:http://hi.baidu.com/wangh0802/item/97fd93f869bfa8c60cd1c8ea 建立一个绑定表格有3种方式: (1)ZDO绑定请求:一个试运转的工具能告诉 ...
- Redis学习一:Redis两种持久化机制
申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis是基于内存来实现的NO SQL数据库,但是我么你都 ...
- 常见的两种注意力机制
为什么需要注意力机制 seq2seq模型已经在机器翻译.自然语言处理领域取得了很大的进步,基于贝叶斯条件概率公式,seq2seq由一个编码器和一个解码器构成,编码器将源序列A编码成一个固定长度的特征向 ...
- java 类隔离_微服务架构中zuul的两种隔离机制实验
ZuulException REJECTED_SEMAPHORE_EXECUTION 是一个最近在性能测试中经常遇到的异常.查询资料发现是因为zuul默认每个路由直接用信号量做隔离,并且默认值是100 ...
- java的两种运行机制_Java☞JVM工作原理
参考博客:1 2 3 JVM工作原理 java虚拟机体系结构 Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平 ...
最新文章
- EntityFramework之领域驱动设计实践(十)(转)
- dnf公共频道服务器不稳定已从初始化状态,DNF公共频道跨区列表 组队连不上必看...
- 高等数学下-赵立军-北京大学出版社-题解-练习8.5
- mysql修改_mysql修改表操作
- [html] 一个标签上同时出现三个或多个class属性,请问它的渲染顺序是怎样的?
- 台式电脑cpu排行榜_2020年台式电脑的CPU和显卡性能天梯图
- 腾讯发力研发文化升级,宣布加入Linux基金会TODO 工作组
- ubuntu LVS+keepalived 笔记
- android x5内核 下载地址,在Android项目中集成腾讯X5内核
- 【图像算法朝圣之路二】虹膜识别1(K-means算法)
- 学计算机怎能不知道电脑配置
- XML注入漏洞修复参考
- windows开机密码破解-hydra(字典)
- 找不到战网服务器ip地址,wow服务器ip地址-我怎么知道战网服务器的IP地址去PING, – 手机爱问...
- golang和经济学相关资料学习,还不错,果然B站是个学习的好地方。
- Spring-jt-Day05-重定向转发JSON其他框架
- 求一元二次方的根(虚根求法)
- java学习视频网课收集
- Zblog插件-zblong插件中心
- 怎么开发一个完整的对外接口API