更正之前《登入小案例》密碼錯3次15分鐘內不准登入

2022-02-26 06:41:35 字數 1160 閱讀 5054

之前寫的一篇 資料庫查詢的一般寫法:從登陸驗證小案例中得到的一些啟示和經驗。是有點問題的。

問題在於判斷15分鐘內密碼錯誤的**。

原**如下:

//

使用using對sqldatareader進行資源管理

using (sqldatareader dr =cmd.executereader())

//加上這句話,可以解決結果集不同步的情況

//判斷次數只能在時間小於15分鐘的情況下才能進行

if (dr.getint32(5) <= 15

)

}if (string.equals(dr.getstring(2

), txtpassword.text.trim()))

else

}else

}

其中

if (dr.getint32(5) > 15

)

//加上這句話,可以解決結果集不同步的情況

if (dr.getint32(3) >= 3

)

假設你現在已經密碼錯誤3次了,然後過了15分鐘,你再來登入。按道理說應該沒問題了。但是當你15分鐘後第一次登入,dr中取到的次數是3,即使進入了if (dr.getint32(5) > 15)這個語句,更新了錯誤次數,下面所使用的錯誤次數依然還是更新之前的。因此密碼輸錯三次後的15分鐘後的第一次登入照樣顯示「登入鎖定」。

解決辦法有兩個:

1.重置錯誤次數之後理解跟新dr物件在伺服器中的查詢結果集。即:

if (dr.getint32(5)>15)  

//更新之前必須關閉

dr.close();

dr = cmd.executereader();

2.將判斷時間大於15分鐘和判斷次數的**寫成巢狀

if (dr.getint32(5) < 15)}

else

一般只有在登入時間少於15分鐘的情況下,才會判斷密碼次數。超過15分鐘就直接更新次數為0,而不用再判斷登入次數了。

這個跟業務邏輯緊密結合,建議這樣寫!

密碼錯誤3次,30分鐘內無法登入原始碼

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...

連續輸入密碼錯誤3次,第二天才能登入

登入安全性 一天內連續輸入密碼錯誤3次,第二天才能登入 過了當天凌晨24點 下面我們先在資料庫中建立乙個試驗表,id,使用者名稱username,密碼pwd,次數num,時間time date 這個功能主要在資料庫中分3中情況判斷 1 解鎖時間到了,清除資料庫以前的記錄數,次數值還原0 2 在解鎖時...

連續輸入密碼錯誤3次,第二天才能登入

登入安全性 一天內連續輸入密碼錯誤3次,第二天才能登入 過了當天凌晨24點 下面我們先在資料庫中建立乙個試驗表,id,使用者名稱username,密碼pwd,次數num,時間time date 這個功能主要在資料庫中分3中情況判斷 1 解鎖時間到了,清除資料庫以前的記錄數,次數值還原0 2 在解鎖時...