天天看點

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/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,如有問題,可以通過以下郵箱位址

[email protected]

 聯系我,非常感謝。

繼續閱讀