js記錄密碼出錯次數並鎖定賬號30分鐘

ndblog發表於2012-11-04

  下面要說的是網站中一個常見的功能,在客人使用抵用券或者其他來支付的時候需要驗證密碼,如果密碼輸入錯誤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/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,如有問題,可以通過以下郵箱地址williamningdong@gmail.com
 聯絡我,非常感謝。


相關文章