0

我想问在指定的失败尝试后如何阻止用户。30 分钟或任何时间后,用户将能够再次登录。这是我的登录示例代码。

public partial class Login : System.Web.UI.Page
{
    SimplerAES AES = new SimplerAES();
    protected void Page_Load(object sender, EventArgs e)
    {
        Session.Clear();
    }
    protected void btnLogIn_Click(object sender, EventArgs e)
    {

        if (txtUsername.Text == "" || txtPassword.Text == "")
        {
            lblMessage.Visible = true;
            txtUsername.Text = "";
            txtPassword.Text = "";
            lblMessage.Text = "Invalid Username/Password";
        }
        else
        {
            SqlConnection con = new SqlConnection(SeiboLMS.Helper.GetConnectionString());
            con.Open();

            SqlCommand com = new SqlCommand();
            com.Connection = con;
            com.CommandType = CommandType.Text;

            com.CommandText = "SELECT * FROM Users WHERE UserName=@UserName";

            com.Parameters.Add("@UserName", SqlDbType.NVarChar);
            com.Parameters[0].Value = txtUsername.Text;

            SqlDataReader data = com.ExecuteReader();

            if (data != null)
            {
                while (data.Read())
                {
                    if (txtPassword.Text == AES.Decrypt(data["Password"].ToString()))
                    {
                        if (data["UserTypeID"].ToString() == "1")
                        {
                            Session["userid"] = data["UserID"].ToString();
                            Session["usertypeid"] = data["UserTypeID"].ToString();
                            Session["username"] = data["UserName"].ToString();
                            Session["password"] = data["Password"].ToString();
                            Helper.Logs(int.Parse(data["UserID"].ToString()), 1, "Log In Successful");
                            Response.Redirect("Admin/Default.aspx");
                        }
                        else
                        {
                            Session["userid"] = data["UserID"].ToString();
                            Session["usertypeid"] = data["UserTypeID"].ToString();
                            Session["username"] = data["UserName"].ToString();
                            Session["password"] = data["Password"].ToString();
                            Helper.Logs(int.Parse(data["UserID"].ToString()), 1, "Log In Successful");
                            Response.Redirect("Employees/Default.aspx");
                        }

                    }
                    else
                    {
                        lblMessage.Text = "Invalid Username/Password.";
                        txtUsername.Text = "";
                        txtPassword.Text = "";
                    }
                }
            }
            else
            {
                lblMessage.Text = "Invalid Username/Password.";
                txtUsername.Text = "";
                txtPassword.Text = "";
            }

            data.Close();
            con.Close();
            con.Dispose();
        }
    }
}

请与我分享你有什么想法。先感谢您..

4

3 回答 3

3

这个问题已经回答过很多次了。

搜索尝试失败的 c# 登录

这个特定的问题非常相似。 登录 - 仅允许 3 次尝试

威廉最高投票答案有以下文字:

使用 MembershipProvider 并在您的 web.config 中,在 system.web 中,您可以配置尝试次数和超时。根据您的要求设置 maxInvalidPasswordAttempts="3" 和 passwordAttemptWindow="5"。

我建议如果你觉得这有帮助,你就去投票给 Willems answer

于 2012-08-21T13:14:12.360 回答
0

您可以使用 MembershipProvider 或根据您的数据库结构创建自己的。实现这一点的方法很多,但一种方法是包含 login_attempt、lockflag 和 timestamp 列。我猜你有 login_attempt 计数器并且正在递增它(并在成功时将其重置为零)然后在登录时检查值,如果用户被锁定,检查时间戳以查看帐户何时以及是否有足够的时间过去被解锁。

于 2012-08-21T13:16:27.120 回答
0

那么,你可以做的是以下几点:

1)在您的用户表中添加一个字段(DateTime),指示他/她被阻止的时间超过了最大登录尝试次数。2) 在 web.config(可能是 AppSettings)中添加一个键,指示访问被阻止的用户必须等待多长时间才能重试。3) 尝试验证用户时,检查锁定字段(DateTime)是否为空,如果是用户正常登录。否则将当前时间与表中此字段中的时间进行比较,如果大于 appsettings 值,则阻止用户登录。

希望我有所帮助!

于 2012-08-21T13:18:11.577 回答