我正在创建一个登录功能,当用户在3次尝试后输入错误信息时,我想要包含一个锁定,它将它们带到一个空白面板并取消登录部分。我正在使用柜台,但它似乎不起作用。如果我输入错误信息,它会告诉我输入了错误的信息,但我不会被锁定
<asp:Panel ID="panel2" runat="server" Wrap="true" Visible="false">
<h2 id="logError" runat="server" visible="false">Error logging in</h2>
<strong>Username</strong><asp:TextBox runat="server" ID="loginName"></asp:TextBox><br />
<strong>Password</strong><asp:TextBox runat="server" TextMode="Password" ID="loginPass"></asp:TextBox> <br />
<asp:Button runat="server" Text="Return" OnClick="ReturnMain" />
<asp:Button runat="server" Text="Log in" OnClick="login" /><br />
<asp:Label ID="lblInfo2" runat="server"></asp:Label>
</asp:Panel>
public void login(Object src, EventArgs e)
{
get_connection();
try
{
connection.Open();
command = new SqlCommand("SELECT * FROM subscribers WHERE Email =@Email and Password = @Password", connection);
command.Parameters.AddWithValue("@Email", loginName.Text);
command.Parameters.AddWithValue("@Password", loginPass.Text);
//Session["User"] = loginName.Text;
//Session["Number"] = attempt;
int attempt = 0;
reader = command.ExecuteReader();
if (reader.HasRows)
{
//notification that the user has logged in
YouHaveLoggedIn.Visible = true;
panel1.Visible = false;
panel2.Visible = false;
panel6.Visible = true;
WishPanel.Visible = true;
}
else
{
attempt++;
lblInfo2.Text = "Attempt count: " + attempt;
logError.Visible = true;
if (attempt >= 3) // lockout function but does not work, unsure why
{
lockedOut.Visible = true;
panel2.Visible = false;
}
}
reader.Close();
}
catch (Exception err)
{
//user did not log in successfully
lblInfo2.Text = "Error reading the database. ";
lblInfo2.Text += err.Message;
}
finally
{
//lblInfo.Text = "good connect. ";
connection.Close();
}
}
我有lblInfo2向我显示尝试号码,但它总是保持在1.这是否是我的if else语句的问题?
答案 0 :(得分:0)
您的attempt
变量是login
方法中的局部变量,这意味着每次尝试登录时,实际尝试次数始终为0,因此用户获得的最大尝试次数为1
您需要保持请求之间的尝试次数,并且可以使用以下方法之一来执行此操作:
如果您选择2.您可能还想保存日期时间,以便您可以执行以下操作:“30分钟后,用户可以重新尝试重新登录”。
答案 1 :(得分:0)
你不能在订阅者表中创建一个新列,它将保存用户登录失败的次数吗? 将计数器置于会话中的想法很糟糕,因为用户可以尝试登录失败并关闭浏览器并使用新会话再次登录。因此每次计数器都会在每次新会话时重置。 你需要在某处存储失败登录的计数器(请不要参加会议)。 另一个不好的方法是将此计数器存储在文本文件中。 为服务器上的每个用户创建一个文本文件,并将失败登录的计数器放入此文本文件中,并在每次尝试失败时更新它。