• js记录密码出错次数并锁定账号30分钟


      下面要说的是网站中一个常见的功能,在客人使用抵用券或者其他来支付的时候需要验证密码,如果密码输入错误5次就锁定,不在让客人使用抵用券了,在这里是使用的cookie来实现的,不太严谨。
    思路很简单,在输入密码错误的时候,使用cookie保存2个变量,一个是标识当前客人是否已经被锁定,这个只保存30分钟,一个是记录输入错误次数,这个可以长时间保存。函数根据是否锁定弹出相应的信息
    if(输入密码错误)
    {
        if(锁定标识为false)
        {
          保存出错次数为1;
          返回锁定状态为false;
        }
        else
        {
          取出出错次数;
        if(出错次数小于5)
        {
            累加出错次数并保存;
            返回锁定状态为false;
        }
        else
        {
            保存锁定状态标识30分钟;
            设置出错次数为0并保存;
            返回锁定状态为true
        }
        }            
    }
    else
    {
        返回锁定状态为false
    }  

    function logInputFaile() {
    
        //var count = document.getElementById("userErrCoun").value;
    
        //var lockTim = document.getElementById("userPinLocTim").value;
    
        var uidErrCoun = document.getElementById("Userid").value + "userErrCoun";
    
        var PinLoc = document.getElementById("Userid").value + "userPinLocTim";
    
     
    
        var count = getCookie(uidErrCoun);
    
        var lockTim = getCookie(PinLoc);
    
     
    
        if (lockTim == null || lockTim == "") {                       //未锁定
    
            var expireDate = new Date();
    
            expireDate.setTime(expireDate.getTime() + 24 * 60 * 60 * 1000);
    
            if (count == null || count=="") {                  //第一次输入错误
    
                setCookie(uidErrCoun, 1, expireDate.toGMTString(), "/");
    
                return false;
    
            }
    
            else {
    
                var expireDate = new Date();
    
                expireDate.setTime(expireDate.getTime() + 24 * 60 * 60 * 1000);
    
                var count = getCookie(uidErrCoun);
    
                if (count <= 5) {                                //出错小于5次
    
                    setCookie(uidErrCoun, ++count, expireDate.toGMTString(), "/");
    
                    return false;
    
                }
    
                else {                                          //大于5次,锁定账号
    
                    var expireDate = new Date();
    
                    expireDate.setTime(expireDate.getTime() + 30 * 60 * 1000);
    
                    setCookie(PinLoc, "userPinLocTim", expireDate.toGMTString(), "/");
    
                    deleteCookie(uidErrCoun, "/");
    
                    return true;
    
                }
    
            }
    
        }
    
        else {
    
            return true;
    
        }
    
    }

      这里很想说明一下设置cookie的过期时间,本来想找到一个类似于adddays()这样的方法,但是javascript中没有类似的方法,只有一个setTime,并且要和getTime搭配之用,其他的方法如setDate(day)是设置当前时间中的天,这个和我们的目的有点差别,一般我们想要设置当前这个cookie多长时间内过期,而不是在一个具体的时间点过期,所以大多数时间我们的思维是:保存用户账号50天,而不是从现在开始计算好50天,然后再当前时间基础上设置天数为50,并且还要考虑50天之后是几号,月份是多少,年份是多少,如果闰年就更麻烦了。

    dateObject.getTime():getTime() 方法可返回指定的日期dateObject距 1970 年 1 月 1 日之间的毫秒数。
    dateObject.setTime(millisec):setTime() 方法以时间据 GMT 时间 1970 年 1 月 1 日午夜之间的毫秒数设置 Date 对象。

      所以只要获取当前时间距离格林威治时间的毫秒数,再加上想要过期的时间的毫秒数,在使用setTime设置就可以得到正确的过期时间。

      最后调用这个函数,如果返回true就证明锁定了,弹出提示,为false证明未被锁定。代码如下: 方法中用到的工具方法setCookie和getCookie是javascript中读写cookie的包装方法,原型请参考另外一篇随笔 javascript读写cookie

    作者:Tyler Ning
    出处:http://www.cnblogs.com/tylerdonet/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请微信联系冬天里的一把火

  • 相关阅读:
    bzoj 2115: [Wc2011] Xor【线性基+dfs】
    bzoj 1027: [JSOI2007]合金【凸包+Floyd】
    bzoj 4824: [Cqoi2017]老C的键盘【树形dp】
    bzoj 2111: [ZJOI2010]Perm 排列计数【树形dp+lucas】
    bzoj 4822: [Cqoi2017]老C的任务【扫描线+树状数组+二维差分】
    bzoj 4823: [Cqoi2017]老C的方块【最大权闭合子图】
    bzoj 4826: [Hnoi2017]影魔【单调栈+树状数组+扫描线】
    洛谷 P3731 [HAOI2017]新型城市化【最大流(二分图匹配)+tarjan】
    洛谷 P3732 [HAOI2017]供给侧改革【trie树】
    poj 1474 Video Surveillance 【半平面交】
  • 原文地址:https://www.cnblogs.com/tylerdonet/p/2754225.html
Copyright © 2020-2023  润新知