文章目录

  • 前言
  • 两种验证机制
  • 状态验证码
  • 无状态验证码

前言

Captcha,中文全称为全自动区分计算机和人类的图灵测试,在实际使用中常常以验证码的形式出现在人们的视野中,即通过展示一张图片,要求用户输入图片中的字符,以此来验证用户是否为人类。

验证码一般的校对流程为:验证码图片由后端生成,传输至前端,前端接受用户的输入,再发送给后端校对。但这其中就出现了问题,如何匹配用户输入和正确的验证码?

两种验证机制

如何匹配用户输入和正确的验证码?
有两种方法:

  1. 将正确的验证码与会话绑定,这里姑且将这种验证码称为“状态验证码”。
  2. 将正确的验证码与键名绑定,这里姑且将这种验证码称为“无状态验证码”。

状态验证码

当访问某个网页的时候,服务器会在服务器端的内存里开辟一块内存,这块内存就叫做 sessionsession 与通过 cookie 与当前会话绑定。
状态验证码将正确的验证码存入 session 中,下面是一个简单的例子:
后端生成字符为abcd的验证码图片,并向 session 中存入键值对

"captcha"=>"abcd"

在接受用户输入后,服务端取出Session中的 capchaabcd,与用户输入进行比较,并返回比较结果。

无状态验证码

状态验证码将键值对存在 session 中,无状态验证码则将键值对存于缓存(Cache)中,但是缓存是所有会话共用的,所以需要生成唯一键名,并将键名与生成的图片一起提交至前端,前端返回用户输入的时候也应该同时返回这个键名。
下面是个简单例子:

后端生成字符为abcd的验证码图片,并生成键值对

"$332hj5ghjk21h3jYU"=>"abcd"

同时将键名 $332hj5ghjk21h3jYU 与图片一起发送至前端。
前端接受用户输入后,返回后端的信息如下

{captcha: "用户的输入",key: "$332hj5ghjk21h3jYU"
}

服务端取出 key 后,再利用 key 从缓存中取出正确的验证码,与用户的输入进行比较,返回比较结果。
无状态验证码需要注意的一个点:在更新验证码时,用户可能会阻止 key 的更新,借此达成只输入一次验证码就可以重复提交表单,所以我们需要在后端每次验证完毕后,销毁缓存中对应的键值对

验证码(Captcha)的两种校对机制相关推荐

  1. 一文看懂 Bahdanau 和 Luong 两种 Attention 机制的区别

    来自 | 知乎  作者 | Flitter 链接 | https://zhuanlan.zhihu.com/p/129316415 编辑 | 深度学习这件小事公众号 本文仅作学术交流,如有侵权,请联系 ...

  2. ReentrantLock和synchronized两种锁定机制

    ReentrantLock和synchronized两种锁定机制 应用synchronized同步锁 把代码块声明为 synchronized,使得该代码具有 原子性(atomicity)和 可见性( ...

  3. Spring AOP两种实现机制是什么?

    Spring AOP两种实现机制是什么? 1.如果是有接口声明的类进行AOP 时,spring调用的是java.lang.reflection.Proxy 类来做处理 2.如果是没有接口声明的类时, ...

  4. Redis中两种持久化机制RDB和AOF

    redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Ap ...

  5. SimpleApp例程中两种绑定机制程序流程

    来自:http://hi.baidu.com/wangh0802/item/97fd93f869bfa8c60cd1c8ea 建立一个绑定表格有3种方式: (1)ZDO绑定请求:一个试运转的工具能告诉 ...

  6. Redis学习一:Redis两种持久化机制

    申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis是基于内存来实现的NO SQL数据库,但是我么你都 ...

  7. 常见的两种注意力机制

    为什么需要注意力机制 seq2seq模型已经在机器翻译.自然语言处理领域取得了很大的进步,基于贝叶斯条件概率公式,seq2seq由一个编码器和一个解码器构成,编码器将源序列A编码成一个固定长度的特征向 ...

  8. java 类隔离_微服务架构中zuul的两种隔离机制实验

    ZuulException REJECTED_SEMAPHORE_EXECUTION 是一个最近在性能测试中经常遇到的异常.查询资料发现是因为zuul默认每个路由直接用信号量做隔离,并且默认值是100 ...

  9. java的两种运行机制_Java☞JVM工作原理

    参考博客:1 2 3 JVM工作原理 java虚拟机体系结构 Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平 ...

最新文章

  1. EntityFramework之领域驱动设计实践(十)(转)
  2. dnf公共频道服务器不稳定已从初始化状态,DNF公共频道跨区列表 组队连不上必看...
  3. 高等数学下-赵立军-北京大学出版社-题解-练习8.5
  4. mysql修改_mysql修改表操作
  5. [html] 一个标签上同时出现三个或多个class属性,请问它的渲染顺序是怎样的?
  6. 台式电脑cpu排行榜_2020年台式电脑的CPU和显卡性能天梯图
  7. 腾讯发力研发文化升级,宣布加入Linux基金会TODO 工作组
  8. ubuntu LVS+keepalived 笔记
  9. android x5内核 下载地址,在Android项目中集成腾讯X5内核
  10. 【图像算法朝圣之路二】虹膜识别1(K-means算法)
  11. 学计算机怎能不知道电脑配置
  12. XML注入漏洞修复参考
  13. windows开机密码破解-hydra(字典)
  14. 找不到战网服务器ip地址,wow服务器ip地址-我怎么知道战网服务器的IP地址去PING, – 手机爱问...
  15. golang和经济学相关资料学习,还不错,果然B站是个学习的好地方。
  16. Spring-jt-Day05-重定向转发JSON其他框架
  17. 求一元二次方的根(虚根求法)
  18. java学习视频网课收集
  19. Zblog插件-zblong插件中心
  20. 怎么开发一个完整的对外接口API

热门文章

  1. 三种方式,教你优雅的替换if-else语句!
  2. 萌新小白详细U盘安装系统笔记 //重点——windows无法安装到这个磁盘,选中的磁盘采用GPT分区格式这个问题
  3. 360安全卫士怎么登录问题
  4. java之实现歌曲文件剪切操作 (输入输出流)
  5. SH367309 BMS 锂电池保护板方案 电池管理系统
  6. Linux如何使用腾讯QQ
  7. android mkdirs 不起作用,android mkdirs无法正常工作
  8. C explicit 关键字详解
  9. 域名解析文件异常如何解决?
  10. Win11跳过联网激活