tp5 layui登录时失败三次出现验证码
未知
2024-02-26 09:59:58
0

问题描述:

   使用tp5和layui框架结合的登录页面,在首次登录时不出现验证码,只出现用户名及密码,如果失败超过3次则出现验证码验证。
因为使用是layui form局部刷新,再第三次失败后需要返回1002值在前端layui判断后让整个页面刷新出现验证码。

解决办法:

 第一各办法:
前端页面layui form代码:

<form class="layui-form">                      
                    <div class="login-box-width">
                        <ul>                          
                            <li class="password-input">                              
                                <div class="form-box clearfix">
                                    <label></label>
                                    <input type="password" name="password" lay-verify="required" id="loginPassWord" placeholder="密码" />
                                </div>
                               
                            </li>
                            {eq name="showcode" value='1'}
                            <li class="code-input">
                                 <div class="message" style="display: none;" id="codediv">
                                    <p class="error-tex">请输入验证码</p>
                                </div>
                                <div class="form-box clearfix">
                                    <input type="text" name="code" lay-verify="required" id="loginsignincode" placeholder="验证码" />
                                    <div class="fr">                                       
                                        <img onclick="this.src='{:captcha_src()}?'+Math.random()" src="{:captcha_src()}" alt="captcha" class="VcodeImg" />
                                    </div>
                                </div>                              
                            </li>
                            {/eq}
                        </ul>
                        <div class="login-set">                         
                            <button lay-submit lay-filter="myform" class="btn"  style="width: 100%">登录</button>
                       
                        </div>
                    </div>
              </form>
 <script type="text/javascript">
        layui.use(['form'],function(){
            var form=layui.form;
            //监听提交事件
            form.on('submit(myform)',function(obj){
                jsonstr=JSON.stringify(obj.field);             
                $.ajax({
                    type: "POST",
                    url: "{:url('login/log')}",
                    data: {"val": jsonstr},                  
                    beforeSend: function (xhr) {
                       loading=layer.load(1,{shade:[0.3,'#000']});
                    },
                    success: function (result) {                  
                        layer.close(loading);
                        if (result.code== 1000) {
                            layer.msg(result.msg,{icon:1})
                            location.href="{:url('first/index')}";
                        } else if(result.code==1002) {
                            layer.msg(result.msg,{icon:1},function(){
                                window.location.reload();                               
                            })
                        }
else {
                            layer.msg(result.msg,{icon:2})
                            $(".VcodeImg").attr('src',"{:captcha_src()}?"+Math.random())
                        }
                    }
                });
                return false;
            })
        })
    </script>

php代码:

//加载登录页面
public function index(){   
        if(empty(session('mid'))){
            $this->assign('showcode',0);
            $logincount=Db::name('mlogin_log')->where('phpsessid',$_COOKIE['PHPSESSID'])->whereTime('login_time','-1 hours')->where(['login_status'=>1,'is_delete'=>1])->count();
            if($logincount>=3){
                // 登录三次没有成功就出现验证码
                $this->assign('showcode',1);               
            }

            return view();
        }       
        $this->redirect('first/index');
    }

    //ajax执行登录
    public function log(){
        if(request()->isAjax()){
            //获取请求信息           
            $req=html_entity_decode(input('val')) ;           
            $request=json_decode($req,true);
            $logincount=Db::name('mlogin_log')->where('phpsessid',$_COOKIE['PHPSESSID'])->whereTime('login_time','-1 hours')->where(['login_status'=>1,'is_delete'=>0])->count();
            if($logincount>=3){
                // 登录三次没有成功就出现验证码
                Db::name('mlogin_log')->where('phpsessid',$_COOKIE['PHPSESSID'])->whereTime('login_time','-1 hours')->where('login_status',1)->update(['is_delete'=>1]);              
                return json(['code'=>1002,'msg'=>'登录失败超过了三次,将输入验证码','data'=>'']);              
            }

            if(isset($request['code'])){
                //判断验证码是否正确
                if(!captcha_check($request['code'])){
                    return json(['code'=>1001,'msg'=>'验证码错误,请重新输入!','data'=>'']);
                }
            }
   }

第二种办法:使用cookie
protected $ProisShowAuthCode;   
    
        // 前端是否显示验证码,默认不显示
        $this->ProisShowAuthCode=2;
        if(cookie('loginNum')>=3){
            $this->ProisShowAuthCode=1;
        }
// 使用cookie记录登录的失败次数           
        if(cookie('loginNum')!=null){
            $nul=cookie('loginNum');
            cookie('loginNum',$nul=1+$nul);
        }else{
            cookie('loginNum',1);
        }
    if(cookie('loginNum')>=3 && $captcha==null){           
         return json(['code'=>1002,'msg'=>'您连续登录失败大于3次,如需帮助请联系客服','data'=>'']);
               
      }

相关内容

MySQL变量类型与用途
MySQL支持多种数据类型,包括数值、字符串、日期和时间等类型,以...
2024-11-20 20:23:37
MySQL变量的作用域与访...
摘要: MySQL变量具有作用域和访问控制,局部变量限于特定上下...
2024-11-20 20:00:40
MySQL变量类型列表
MySQL变量类型包括数值、字符串、日期和时间等类型,用于存储不同...
2024-11-20 19:46:45
MySQL变量数据类型介绍
MySQL支持多种数据类型,包括数值、字符串、日期时间及枚举和集合...
2024-11-20 19:23:39
MySQL变量存储的数据类...
MySQL支持多种数据类型以存储不同种类的变量,包括数值型、字符串...
2024-11-20 18:00:48
淘宝购物优惠券,省钱又省时...
本文详述了淘宝购物优惠券的来源、使用方法及好处,强调其省钱省时、提...
2024-11-20 13:00:41

热门资讯

JavaScript获取当前协... JavaScript获取当前协议,域名,路径
解决Phpcms V9手机门户... 第一步:开启手机网站。位置:模块 》手机门户 》 添加手机站点,如果模块里面没有手机门户,那么就在模...
layui tooltip提示... 在layui表单中,我们想把一个标签做出提示,以标明这个表单元素是做什么有什么功能时,就可以用上提...
layui中出错Unexpec... layui中出错Unexpected identifier
如何在html中禁止复制文字 问题描述: 如何禁止别人复制自己的文章? 解决办法: 在body标签中添加以下代码: onconte...
JS实现html打印功能,打印... !DOCTYPE htmlhtmlhead meta charset=utf-8 title打印功能...
bootstrap 图片文字居... 问题描述: 让图片和文字居中显示。 解决办法: !-- style--.navbars img{ m...
bootstrap图片排版布局 问题描述: 在使用bootstrap的时候,出现了这样的问题。 排版对不齐。 解决办法: 通过上图发...
手机端底部定位 问题描述: 需要实现的效果 解决办法: !-- 底部 -- div class=layui-row ...