后端验证码的值如何和前端进行匹对?
但是因为用户没有注册,无法给他绑一个识别身份,所以我暂时的设计是这样的:
生成验证码图片时把验证码的值存进缓存(redis)里,缓存设置过期时间,然后前端提交验证验证码时从缓存里读取值,看是否有,如果存在匹对成功并且删除该条缓存。
这样的问题就是有可能出现输错也能匹对成功的情况,只是几率不是特别高。
请问有没有更好的思路?
回复内容:
前端用户注册时填验证码图片的值,然后和后端进行匹对。
但是因为用户没有注册,无法给他绑一个识别身份,所以我暂时的设计是这样的:
生成验证码图片时把验证码的值存进缓存(redis)里,缓存设置过期时间,然后前端提交验证验证码时从缓存里读取值,看是否有,如果存在匹对成功并且删除该条缓存。
这样的问题就是有可能出现输错也能匹对成功的情况,只是几率不是特别高。
请问有没有更好的思路?
如果是非前后端分离,那么可以将验证码存放在session中,进行校验。
如果是前后端分离,那么,前端每次请求都是无状态的,那么,就需要在前端第一次请求的时候,分配给前端一个token,然后,前端每次请求时,都会带着这个token。可以将该token作为redis的键值,并将验证码放在对应的值位置。
一个session一个验证码,没注册也有session
只要控制好,应该不会出现输错也能匹对成功的情况。
1,后台生成验证码。并且放到session里。
2,前台获取验证码也是和刚才放到session里的这个同步。
3,如果前台输错了,或者用户点击了切换验证码。那后台就更换验证码,同时session里的也更换
其实,只要始终保证前台显示的验证码和session中的同步就不会出现问题。
PS:每个request是多线程情况的话就应该不会出现输错也能匹对成功的情况。
用户注册时生成验证码时,把验证码写入session,用户提交后,从session里读出验证码,进行比对
你参考下这篇文章http://netsecurity.51cto.com/art/201402/428721.htm
前端:
后端:
$showing=strtoupper($_POST['checkcode']); //检测提交过来的验证码
if($_SESSION['checkcode']!=$showing||empty($showing)){
unset($_SESSION['checkcode']);
die('验证码错误');
}
验证码生成:
session:在计算机中,尤其是在网络应用中,称为“会话控制”。不论是不是注册用户,只要访问,服务器就会生成一个唯一的会话 ID 。把验证码数据存在 session 里面即可。
下一篇: 控制文本是否能被替换的有关问题,求