【php】SESSION保存短信验证码问题
mip版 关注:124 答案:4 悬赏:0
解决时间 2021-02-24 02:40
已解决
2021-02-23 03:47
网站有一个手机验证功能,我是用一个$_SESSION['tel']=‘xxxxxx'来保存所有验证码?还是为每个用户都创建一个SESSION来保存验证码?如$_SESSION['user1']=xxxxxx, $_SESSION['user2']=xxxxxx,$_SESSION['user3']=xxxxxx.验证成功后注销。
最佳答案
2021-02-23 04:45
如果你的手机验证功能所需要的验证码是晕一次性的 就直接$_SESSION['tel']里面 不用单独直接某个用户,如果你的验证码是长时间有效的话 就保存在数据库或者cookie里面
全部回答
1楼
2021-02-23 07:04
恕我直言,看来楼主还完全不理解验证码的使用(貌似很多网站的开发人员均如此)。
之所以要验证码,而且还要以图片的方式显示,主要就是为了确保客户端是人工操作。
为了确保验证码只能被肉眼识别,验证码图片还要故意弄得“乱七八糟”、“杂乱无章”的。
因此,是不可能把正确答案再以文本方式放在客户端的。
若把答案以文本形式发送到客户端,随便写个程序就可以获取到正确答案并轻松通过验证,若如此,还要那样辛辛苦苦弄出来的验证码何用?
而且,若在客户端进行验证,是有很多种方法可以跳过验证的。
如果要使用图片验证码,则肯定是会回到服务器端之后才会验证的。
所以,你目前应该采用的正确的做法是:
1、把你那句“生成随机数并保存到session中”的代码放到image.jsp中
2、login.jsp页面上的相关代码改成:
function getVimg()
{
document.getElementById( "vimg" ).src = "image.jsp?num=" + Math.random();
}
getVimg();
这个应该是页面加载的问题,我按照楼主的做法做了一下,页面首次加载时根本无法接收到session.getAttribute("validate")的值,而之所以后来取到的都是前一次的验证码,是因为你取session里的验证码时,新的验证码还没有放到session中,这就造成了在客户端验证时产生的错误。如果要解决这个问题,还是应该与服务器交互进行验证,这样就可以避免这种程序运行差异而导致的问题了。
客户端是不要做任何验证的。否则就有漏洞了。因为验证码只能使用一次。
1 你用图片生成验证码,保存在session中
2 用户输入验证码
3 服务器端进行比对
4 无论正确与否,都销毁session里面的验证码!
2楼
2021-02-23 06:56
哥哥,session是自动生成的,你连接到服务器就会有一个session_id的,每个用户的ID都是唯一的。还是为每个用户都创建一个SESSION来保存验证码? 从这句话就知你还没明白这个了…… 直接保存就行了,用户只能读到自己ID的session的。注销 这个可以 在服务器设置生命周期,不设置也行 ,关闭连接会自己注销
3楼
2021-02-23 05:21
首先,为了确保启用session,请在使用session前调用session_start();
其次,为了避免简单的编程错误,建议所有变量,函数,类名手工区分大小写.
各种编程语言在"是否区分大小写"上表现不一致,但坚持区分一定不会有错!
也请不要依赖ide工具的自动纠正大小写功能
良好的编程习惯是高效编写无错代码的前提
注:全局变量$_session,$_request,$_get,$_post必须使用大写
$_session在未启用session情况下使用不会报错
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上信息!
推荐资讯
大家都在看