php - 后端验证码的值如何和前端进行匹对?

 黑漆高傲的眼眸 发布于 2022-11-30 16:47

前端用户注册时填验证码图片的值,然后和后端进行匹对。

但是因为用户没有注册,无法给他绑一个识别身份,所以我暂时的设计是这样的:

生成验证码图片时把验证码的值存进缓存(redis)里,缓存设置过期时间,然后前端提交验证验证码时从缓存里读取值,看是否有,如果存在匹对成功并且删除该条缓存。

这样的问题就是有可能出现输错也能匹对成功的情况,只是几率不是特别高。

请问有没有更好的思路?

6 个回答
  • 如果是非前后端分离,那么可以将验证码存放在session中,进行校验。
    如果是前后端分离,那么,前端每次请求都是无状态的,那么,就需要在前端第一次请求的时候,分配给前端一个token,然后,前端每次请求时,都会带着这个token。可以将该token作为redis的键值,并将验证码放在对应的值位置。

    2022-11-30 19:08 回答
  • 一个session一个验证码,没注册也有session

    2022-11-30 19:08 回答
  • 只要控制好,应该不会出现输错也能匹对成功的情况。
    1,后台生成验证码。并且放到session里。
    2,前台获取验证码也是和刚才放到session里的这个同步。
    3,如果前台输错了,或者用户点击了切换验证码。那后台就更换验证码,同时session里的也更换

    其实,只要始终保证前台显示的验证码和session中的同步就不会出现问题。

    PS:每个request是多线程情况的话就应该不会出现输错也能匹对成功的情况。

    2022-11-30 19:08 回答
  • 用户注册时生成验证码时,把验证码写入session,用户提交后,从session里读出验证码,进行比对
    你参考下这篇文章http://netsecurity.51cto.com/art/201402/428721.htm

    2022-11-30 19:08 回答
  • 前端:<img src="checkcode.php" id="code" onclick="JavaScript:this.src='checkcode.php?tm='+Math.random()" />
    后端:

    $showing=strtoupper($_POST['checkcode']); //检测提交过来的验证码
    if($_SESSION['checkcode']!=$showing||empty($showing)){
      unset($_SESSION['checkcode']);
      die('验证码错误');
    }
    

    验证码生成:

    2022-11-30 19:08 回答
  • session:在计算机中,尤其是在网络应用中,称为“会话控制”。不论是不是注册用户,只要访问,服务器就会生成一个唯一的会话 ID 。把验证码数据存在 session 里面即可。

    2022-11-30 19:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有