2010-10-21 126 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; 
}