1. 程式人生 > >三次登入失敗停留15秒才可重試

三次登入失敗停留15秒才可重試

     之前在學習登入頁面時,主要是為了複習我們學習ADO.Net時的一個防注入漏洞攻擊,當然也有連線資料庫的一系列操作,使用引數,發揮引數的作用。當時聽到視訊教程里老師講到當我們嘗試登入失敗多次後,系統就會鎖定登入介面,等待一定的時間之後使用者才能成功登入,只是提到了一個思路,先記錄下嘗試上限時的時間,再根據過了多少時間才能夠再登入。

     今天我嘗試試登入多次後,停留一定時間才能繼續登入。

     首先,使用登入功能,務必需要一個使用者名稱和密碼的資料庫,這裡為了簡單,就簡略地隨便編造了一個。

     

     在VS中,前期的操作,連線資料庫、寫sql語句等等。包括後面需要使用的systemLock(),這個方法是設定文字框及按鈕的是否可用的功能。

   

     

     錯誤三次時的提示

     

     成功登入的提示

     

     主要是使用ExecuteScalar()方法,通過點選按鈕來觸發事件,將文字框輸入的資料與資料庫中的資料庫進行匹配,成功返回值並顯示成功。
     當錯誤時,系統會有一個變數,會計數,當次數達到三次時,系統會將文字框及按鈕的屬性Enabled設定為false,並通過System.Threading.Thread.Sleep()這一方法,停留15秒,再將將文字框及按鈕的屬性Enabled設定為true。這樣一來,貌似不需要計入系統地時間,好像變得非常簡單了。其實不然,這裡有一個非常大的弊端。
     使用System.Threading.Thread.Sleep()這個方法,會佔用系統資源,好像一般的登入,鎖定也不是這種不能登入的方式,如果鎖定時間過長,那麼上面那個方法會非常佔用時間,因此不可取。
     像iphone手機的鎖屏功能,當密碼輸錯,系統隨著累計出錯,時間停留的時間也會變長,時間等待也是在輸入時提醒。
     因此我們的登入介面,需要將輸入到上限即3次時,記下此時的系統時間,當再次嘗試登入時,通過比較兩者的時間差,來比較是否達到時間間隔,就可以達到這一目的了。當然必須是同一賬號嘗試三次後,進行判斷。

     個人覺得有個bug,比如一個的賬號,被別人總是錯誤登入,那當本人去登入的時候不是鎖住了嗎?這該怎麼辦?