2010-10-21 124 views
4

我正在創建一個新的應用程序..我創建了一個登錄頁面成功..現在我需要修改登錄頁面..只有3次嘗試只允許用戶..如果用戶錯誤地進入密碼超過3次(5分鐘內)他的帳戶必須被屏蔽..並且必須顯示錯誤消息,因爲您無法訪問您的網頁..請分享您的想法...登錄 - 只允許3次嘗試

+0

你是如何存儲用戶信息? – Adkins 2010-10-21 14:04:50

回答

3

只需添加一個int列用戶表稱爲FailedLogins。每當它失敗時計算一次,如果計數器較大,那麼3不允許從該賬戶進行任何登錄。

編輯:如果你想在一定時間後的嘗試重置後,您必須添加一個日期時間列(FE LastFailedLogin),並檢查是否有足夠的時間已經過去了,允許進一步的嘗試和/或重置計數器。

+0

Tnx的答覆...如果今天我登錄2次,並得到失敗..第二天如果我輸入錯誤計數將只允許一次我是正確的.. – Jafry 2010-10-21 13:50:46

+1

@Jafry:這取決於...你想什麼時候重置它?如果您想在一段時間後重置它,則必須添加一個字段,該字段包含上次失敗登錄的日期/時間,並在必要時進行重置。 – Bobby 2010-10-21 13:54:02

3

您將需要使用Membership.MaxInvalidPasswordAttempts屬性來跟蹤登錄嘗試。

這裏有顯示錯誤信息的工作代碼示例:

http://forums.asp.net/p/1520434/3652047.aspx

+0

No there isnt ... – Jason 2010-10-21 13:45:09

+0

也許這個鏈接可能有幫助:http://www.asp.net/security/tutorials/validating-user-credentials-against-the-membership-user-store-cs – dhirschl 2010-10-21 13:48:24

+0

Tnx的答覆..我有一些關於手動登錄過程的想法..但仍然我不清楚..CAn你幫我 – Jafry 2010-10-21 13:51:42

2

多少用戶,我們談論,在這裏? 1?數百?

如果只有一個,您可以創建一個靜態的int變量和靜態的DateTime變量。程序啓動時,將int nTries設置爲0,將DateTime staticDate設置爲Now。

每次顯示登錄屏幕時,檢查nTries < MAX_TRIES和timeSpan < 5分鐘。如果timeSpan大於5分鐘,請將nTries設置爲0並將staticDate更新爲Now。

如果您喜歡使用文本文件進行讀/寫,您還可以輕鬆讀取/寫入文本文件的嘗試次數。在這種情況下,如果只有少數用戶的小應用程序(避免數據庫開銷),則每個用戶可以有一行。

如果您有數百個用戶,那麼您需要使用數據庫。在該數據庫中,您可以存儲每個用戶,他最後一次登錄嘗試的時間戳,以及他擁有的嘗試次數。

+0

文本文件實際上是一個非常糟糕的主意,因爲它只有在用戶不打開文件並更改它。用戶是非常棘手,愚蠢,可怕的人。如果他們有機會獲得一點機會,他們會接受並驚歎你:P – Adkins 2010-10-21 14:03:38

+0

我同意。我的回答是基於OP是否想在沒有任何其他存儲機制的情況下測試某些東西。 – jp2code 2010-10-21 18:08:52

9

使用MembershipProvider並在您的web.config中,在system.web中,您可以配置嘗試次數和超時次數。根據您的要求設置maxInvalidPasswordAttempts =「3」和passwordAttemptWindow =「5」。

<membership defaultProvider="MyMembershipProvider"> 
    <providers> 
    <clear/> 
    <add name="MyMembershipProvider" 
     type="MyMembershipProvider" 
     autogenerateschema="true" 
     connectionStringName="MyConnectionString" 
     enablePasswordRetrieval="false" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="false" 
     requiresUniqueEmail="false" 
     passwordFormat="Hashed" 
     maxInvalidPasswordAttempts="3" 
     minRequiredPasswordLength="8" 
     minRequiredNonalphanumericCharacters="1" 
     passwordAttemptWindow="5" 
     passwordStrengthRegularExpression="" 
     applicationName="/" /> 
    </providers> 
</membership> 

這將需要一些配置,但是在正確配置(甚至有roleprovider)默認asp.net登錄控件幾乎可以處理你的一切,甚至是PasswordRecovery和CreateUserWizard控件。 MembershipProvider將自動生成用戶註冊所需的全部表格。

數據庫可以是mdb文件,ms sqlserver或mysql數據庫。

1

您可以使用此代碼,

//if login failed 
if (session["loginclient"] != null) 
{ 
    if(Convert.ToInt32(session["loginclient"]) == 3) 
      Response.Redirect("Forgetpassword.aspx") 
    else 
      session["loginclient"] = Convert.ToInt32(session["loginclient"]) + 1 
} 
else 
{ 
    session["loginclient"] = 1; 
}