登录次数限制实例

业务逻辑

1、根据用户名从数据库中取出一行数据,并根据数据库服务器时间,算出上次限制登录的时间和当前时间的时间间隔。

这里写图片描述

2、判断此用户时间间隔过了15分钟没有。如果没有,则给出禁止登录的提示;如果超过15分钟,则判断密码是否正确。
3、如果密码正确,提示登录成功并重置错误次数;如果密码不正确,则给出密码错误提示并更新数据库错误次数。并判断是否够3次了。
4、如果够3次的话,就记录错误时间,并清零错误次数。

代码实现

private void btnLogin_Click(object sender, EventArgs e)
{
    //获取界面的数据
    string uid = txtUserName.Text.Trim();
    string pwd = txtPwd.Text.Trim();
    //判断文本框是否为空
    if (uid == "")
    {
        MessageBox.Show("请输入用户名", "温馨提示");
    }
    else if (pwd == "")
    {
        MessageBox.Show("请输入密码", "温馨提示");
    }
    else
    {
        //将数据传到数据库进行检验
        using (SqlConnection conn = new SqlConnection("server=.;database=Test;uid=sa;pwd=jujianfei"))
        {
            //根据数据库服务器时间,算出现在隔了多少分钟了
            SqlCommand cmd = new SqlCommand("select *,DATEDIFF(MINUTE,LastErrTime,GETDATE()) from LoginPractice where UserName=@uid", conn);

            //声明需要的参数把参数添加到命令对象的几个参数中
            cmd.Parameters.Add(new SqlParameter("@uid", uid));
            conn.Open();

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.HasRows)
                {
                    dr.Read();//不管dr取到多少条数据,只取出前面第一行(调用一次read,就会读取一行,也只读一行)
                    if (dr.GetInt32(5)<15) //先判断最后的错误事件,如果过了15分钟,就放过去了
                    {
                        MessageBox.Show("登录锁定时间未到,请稍后重试!");
                        return;
                    }

                    if (dr[2].ToString() == pwd) 
                    {
                        MessageBox.Show("登录成功!", "温馨提示");
                        UserInfo.ReSetErrTimes(dr.GetInt32(0)); //登录成功后重置错误次数
                    }
                    else //如果密码不正确
                    {
                        MessageBox.Show("登录失败,密码错误!");
                        //更新错误次数,这里是更新的数据库,dr里面的数据是在更新之前就取出来的了
                        UserInfo.UpDateErrTimes(dr.GetInt32(0));
                        if (dr.GetInt32(3)+1 == 3)
                        {
                            UserInfo.UpDateLastErrTime(dr.GetInt32(0));    //记录最后错误的时间
                            UserInfo.ReSetErrTimes(dr.GetInt32(0));      //重置错误次数
                        }
                    }
                }
                else
                {
                    MessageBox.Show("用户不存在!", "温馨提示");
                }
            }
        }
    }
}
class UserInfo
{
    /// 
    /// 更新错误次数
    /// 
    /// 
    /// 
    public static int UpDateErrTimes(int id)
    { 
        using(SqlConnection conn=new SqlConnection("server=.;database=Test;uid=sa;pwd=jujianfei"))
        {
            using (SqlCommand cmd = new SqlCommand("update LoginPractice set ErrTimes = ErrTimes + 1 where id =" + id, conn))
            {
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
        }
    }

    /// 
    /// 错误次数清零
    /// 
    /// 
    /// 
    public static int ReSetErrTimes(int id)
    {
        using (SqlConnection conn = new SqlConnection("server=.;database=Test;uid=sa;pwd=jujianfei"))
        {
            using (SqlCommand cmd = new SqlCommand("update LoginPractice set ErrTimes = 0 where id = " + id, conn))
            {
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
        }
    }

    /// 
    /// 更新错误登录时间
    /// 
    /// 
    /// 
    public static int UpDateLastErrTime(int id)
    {
        using (SqlConnection conn = new SqlConnection("server=.;database=Test;uid=sa;pwd=jujianfei"))
        {
            using (SqlCommand cmd = new SqlCommand("update LoginPractice set LastErrTime=getdate() where id=" + id, conn))
            {
                conn.Open();
                return cmd.ExecuteNonQuery();    
            }
        }
    }
}

实例下载

你可能感兴趣的:(C#)