ASP.NET SQL成员身份检查使用循环的登录尝试失败

本文关键字:循环 登录 失败 SQL NET 成员 身份 检查 ASP | 更新日期: 2023-09-27 18:20:42

我有一个ASP.NET web应用程序,Web.config文件设置为启用锁定:maxInvalidPasswordAttempts="8"

然而,我不想简单地锁定用户,我想在4次尝试后显示一条消息,即在X次额外失败尝试后,帐户将被锁定。

示例:假设用户有4次尝试失败;他们会看到一条消息,警告帐户将被锁定(我不想指定总尝试次数),只是太多的失败将导致帐户被锁定

在8次尝试失败后,用户会收到一条消息,说明帐户已锁定。

为了做到这一点,我决定使用While Loop,所以我创建了这样的循环:我通常会创建一个粗略的草稿,如果代码有效,我会将其添加到我的项目中。

我已经登录了,其他一切都在工作,只是这个循环。如果我能找到循环出错的地方,那么我就可以进行所有的DB检查并锁定帐户。

if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
  {
  FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkMemory.Checked);
    }
    else
    {
      ltrStatusMsg.Text = "* InValid Login";
    }

问题是,这段代码在控制台应用程序中有效,但当我尝试在按钮事件中编写它时,它失败了。

    static void Main(string[] args)
    {
        int loginAttempts = 0;
        int maxLoginAttempt = 8;
        while (loginAttempts < maxLoginAttempt)
        {
            Console.Write("Enter a number: ");
            Console.ReadLine();
            if (loginAttempts == 3)
            {
                loginAttempts++;
                Console.Write("Lock Warning :");
            }
            loginAttempts++;
        }
        Console.Write("Account Locked: ");
        Console.ReadKey();
    }

示例:在按钮事件中:*注意:我已经多次更改此代码以找到我的问题。*

protected void btnSubmit_Click(object sender, EventArgs e)
        {
            int loginAttempts = 0;
            int maxLoginAttempt = 8;
        while (loginAttempts < maxLoginAttempt & txtPassword.Text != "Test")
        {
            if (loginAttempts == 3)
            {
                loginAttempts++;
                ltrStatusMsg.Text = "Lock Warning";
            }
            loginAttempts++;
        }
        ltrStatusMsg.Text = "Account Locked";
    }

ASP.NET SQL成员身份检查使用循环的登录尝试失败

这样尝试。。。。

protected ovoid Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
    Session["mloginAttempts"] = 0;
    Session["maxLoginAttempt"] = 8;
  }
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
  int mLoginAttempt = Convert.ToInt32(Session["mloginAttempts"]);
  int maxLoginAttempt = Convert.ToInt32(Session["maxLoginAttempt"]);
  if(loginAttempts < maxLoginAttempt & txtPassword.Text != "Test")
  {
    if (loginAttempts == 3)
    {
      Session["mloginAttempts"] = Convert.ToInt32(Session["mloginAttempts"]) + 1;
      ltrStatusMsg.Text = "Lock Warning";
    }
    Session["mloginAttempts"] = Convert.ToInt32(Session["mloginAttempts"]) + 1;
  }
  else
  {
    ltrStatusMsg.Text = "Account Locked";
  } 
}