【php】SESSION保存短信验证码问题

网站有一个手机验证功能,我是用一个$_SESSION['tel']=‘xxxxxx'来保存所有验证码?还是为每个用户都创建一个SESSION来保存验证码?如$_SESSION['user1']=xxxxxx, $_SESSION['user2']=xxxxxx,$_SESSION['user3']=xxxxxx.验证成功后注销。

哥哥,session是自动生成的,你连接到服务器就会有一个session_id的,每个用户的ID都是唯一的。还是为每个用户都创建一个SESSION来保存验证码? 从这句话就知你还没明白这个了…… 直接保存就行了,用户只能读到自己ID的session的。注销 这个可以 在服务器设置生命周期,不设置也行 ,关闭连接会自己注销追问

谢谢,明白了,实习小白,多多指教。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-19
如果你的手机验证功能所需要的验证码是晕一次性的 就直接$_SESSION['tel']里面 不用单独直接某个用户,如果你的验证码是长时间有效的话 就保存在数据库或者cookie里面追问

验证码保存5分钟,5分钟后验证码失效。
我这样写的:$_COOKIE($code,$_SESSION['tel'],5*60);
假如 user1 的验证码,$_SESSION['tel'] = "123456"

user2的验证码, $_SESSION['tel'] = "654321"
在user1没有验证码成功前,user2的验证码把user1的验证码覆盖掉了?

追答

应该是5分钟内当前用户的验证不再次重复生成,如果过了5分钟还没有验证,则删除该验收码。但用户有再次操作的时候再判断是否重新生成。

追问

谢谢

第2个回答  2020-08-08
一般现在系统群发的验证码都是由专门的短信群发平台发送的,号段一般是106,如果有收不到的情况,可能是被运营商拦截了或者是系统延迟了
群发短信分2种,一种是用专门的短信群发平台来推送,这种一般是106开头的
还有一种就是用自己的手机号群发短信,如果短时间高频次的发送,很容易被运营商判定为骚扰短信进行拦截
第3个回答  2013-08-19
恕我直言,看来楼主还完全不理解验证码的使用(貌似很多网站的开发人员均如此)。

之所以要验证码,而且还要以图片的方式显示,主要就是为了确保客户端是人工操作。
为了确保验证码只能被肉眼识别,验证码图片还要故意弄得“乱七八糟”、“杂乱无章”的。

因此,是不可能把正确答案再以文本方式放在客户端的。
若把答案以文本形式发送到客户端,随便写个程序就可以获取到正确答案并轻松通过验证,若如此,还要那样辛辛苦苦弄出来的验证码何用?
而且,若在客户端进行验证,是有很多种方法可以跳过验证的。

如果要使用图片验证码,则肯定是会回到服务器端之后才会验证的。

所以,你目前应该采用的正确的做法是:

1、把你那句“生成随机数并保存到session中”的代码放到image.jsp中

2、login.jsp页面上的相关代码改成:

<image src="" id="vimg" onclick="getVimg()" >
<script>
function getVimg()
{
document.getElementById( "vimg" ).src = "image.jsp?num=" + Math.random();
}
getVimg();
</script>

这个应该是页面加载的问题,我按照楼主的做法做了一下,页面首次加载时根本无法接收到session.getAttribute("validate")的值,而之所以后来取到的都是前一次的验证码,是因为你取session里的验证码时,新的验证码还没有放到session中,这就造成了在客户端验证时产生的错误。如果要解决这个问题,还是应该与服务器交互进行验证,这样就可以避免这种程序运行差异而导致的问题了。

客户端是不要做任何验证的。否则就有漏洞了。因为验证码只能使用一次。

1 你用图片生成验证码,保存在session中
2 用户输入验证码
3 服务器端进行比对
4 无论正确与否,都销毁session里面的验证码!追问

恕我直言 答非所问!!!

追答

你又错了。给你提供一种思路。那你的问题又是什么问题呢?你经过测试了吗?就提问。呵呵 那照你这个进度 岂不是写一个内容 问一个问题。看回答要仔细。