• 限定登录失败次数,超过指定次数就限制登录一段时间


    一。需要的数据库字段
    LastLoginErrDate(日期类型)【登陆失败最大次数时的时间】  
    LoginErrTimes(整形,默认值为0)【登陆失败的次数】

     二。 前台代码
    <div>
    <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox><br />
    <asp:TextBox ID="txtPwd" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    </div>

    三。后台代码
    private int permitLoginTimes = 5; //运行失败的次数
    private int intervalMinute = 1;   //登陆失败最大次数后需间隔的时间(单位为分钟)


    protected void Button1_Click(object sender, EventArgs e)
    {
    string info = string.Empty;  //提示信息

    string sql = "SELECT COUNT(id)  FROM admin a WHERE a.ID='" + this.txtUserName.Text + "'";
    DBOperator db = new DBOperator();
    int count = Convert.ToInt32(db.ExecuteScalar(sql, System.Data.CommandType.Text));  //判断用户是否存在
    if (count > 0)   //用户名存在
    {
    sql = "SELECT a.LoginErrTimes,a.LastLoginErrDate FROM admin a WHERE a.ID='" + this.txtUserName.Text + "'";
    DataTable dtTemp = db.GetDataTable(sql, CommandType.Text);   //获取该用户登陆失败的次数和达到最大登陆次数的时间
    int errTimes = Convert.ToInt32(dtTemp.Rows[0]["LoginErrTimes"]); //登陆失败的次数
    if (errTimes == permitLoginTimes) //已经达到允许登陆失败的最大次数
    {
    DateTime dtLast = Convert.ToDateTime(dtTemp.Rows[0]["LastLoginErrDate"]); //达到最大登陆次数的时间
    TimeSpan ts1 = new TimeSpan(dtLast.Ticks);
    TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);  //当前时间
    TimeSpan ts = ts2.Subtract(ts1).Duration();
    if (ts.Minutes < this.intervalMinute)   //登陆间隔时间小于规定的时间
    {
    info = "请" + this.intervalMinute + "分钟后再登陆!";
    Response.Write("<script>alert('" + info + "')</script>");
    }
    else   //达到间隔时间后,清0的登陆失败次数,视其为第一次登陆
    {
    sql = "UPDATE  admin SET LoginErrTimes = 0 WHERE ID='" + this.txtUserName.Text + "'";
    db.ExecuteSql(sql, System.Data.CommandType.Text);
    LoginLess(0);
    }
    }
    else   //登陆还未失败或失败次数小于最大次数
    {
    LoginLess(errTimes);
    }
    }
    else   //用户不存在
    {
    Response.Write("<script>alert('用户不存在')</script>");
    }
    }

    private void LoginLess(int tempErrorTimes)
    {
    DBOperator db = new DBOperator();
    string info = string.Empty;
    string sql = "SELECT COUNT(id)  FROM admin a WHERE a.ID='" + this.txtUserName.Text + "' AND a.Pwd='" + this.txtPwd.Text + "'";
    int tempCount = Convert.ToInt32(db.ExecuteScalar(sql, System.Data.CommandType.Text));
    if (tempCount == 0) //密码错误
    {
    if (tempErrorTimes == this.permitLoginTimes - 1)  //已经登陆失败最大次数
    {
    sql = "UPDATE  admin SET LastLoginErrDate = GETDATE(), LoginErrTimes =5" +
    " WHERE ID='" + this.txtUserName.Text + "'";
    db.ExecuteSql(sql, System.Data.CommandType.Text);

    info = "您已经连续登陆失败" + permitLoginTimes.ToString() + "次,请" + this.intervalMinute + "分钟后再登陆!";
    Response.Write("<script>alert('" + info + "')</script>");
    }
    else   //其它登陆失败次数
    {
    sql = "UPDATE  admin SET LastLoginErrDate = GETDATE(), LoginErrTimes = LoginErrTimes+1" +
    " WHERE ID='" + this.txtUserName.Text + "'";
    db.ExecuteSql(sql, System.Data.CommandType.Text);
    info = "您已经连续登陆失败" + Convert.ToString(tempErrorTimes + 1) + "次,你还有" + Convert.ToString(this.permitLoginTimes - tempErrorTimes - 1) + "次登陆机会";
    Response.Write("<script>alert('" + info + "')</script>");
    }
    }
    else //登陆成功,将登陆错误次数清0
    {
    sql = "UPDATE  admin SET LoginErrTimes =0" +
    " WHERE ID='" + this.txtUserName.Text + "'";
    db.ExecuteSql(sql, System.Data.CommandType.Text);
    Response.Write("<script>alert('登陆成功!')</script>");
    }
    }
  • 相关阅读:
    基础知识---抽象类和接口
    基础知识---数组和链表
    基础知识---枚举
    基础知识---IEnumerable、ICollection、IList、IQueryable
    [翻译]微软 Build 2019 正式宣布 .NET 5
    基础知识---const、readonly、static
    简说设计模式
    Java修行之路
    简说设计模式——迭代器模式
    简说设计模式——备忘录模式
  • 原文地址:https://www.cnblogs.com/gossip/p/2167994.html
Copyright © 2020-2023  润新知