分享

登陆三次错误提示15分钟后再试

 quasiceo 2018-08-19

现在很多网站都设有同一个用户名登陆多次后就会限制再次登陆。以下是一种实现方法,需要结合数据库来实现。


1.表设计



Id是一个逻辑主键,UserName用户名,PassWord 密码,LastTime记录登陆上一次登陆失败时间,ErrorTimes记录登陆登陆失败次数


以下是实现代码:

wpf的xmal Grid:

 <TextBlock Height="26" HorizontalAlignment="Left" Margin="64,39,0,0" Name="textBlock1" Text="用户名" VerticalAlignment="Top" Width="123" />
  <TextBlock Height="26" HorizontalAlignment="Left" Margin="64,123,0,0" Name="textBlock2" Text="密码" VerticalAlignment="Top" Width="123" />
   <TextBox Height="27" HorizontalAlignment="Left" Margin="64,71,0,0" Name="txtusername" VerticalAlignment="Top" Width="123" />
  <Button Content="登陆" Height="27" HorizontalAlignment="Left" Margin="64,231,0,0" Name="btnlogin" VerticalAlignment="Top" Width="123" Click="btnlogin_Click" />
   <PasswordBox Height="24" HorizontalAlignment="Left" Margin="64,176,0,0" Name="password" VerticalAlignment="Top" Width="123" />


后台的实现:

 private void btnlogin_Click(object sender, RoutedEventArgs e)
        {
            //LoginCheck();
            #region 查询登陆名和登陆次数
            using (SqlConnection conn = new SqlConnection(
    "Data Source=127.0.0.1;Initial Catalog=MyTest;User Id=sa;Password=solora020"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "Select * from T_User where UserName=@name ";
                    cmd.Parameters.Add(new SqlParameter("@name", txtusername.Text.Trim()));
                    //获取查询次数


                //    SqlDataReader reader
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        reader.Read();
                        int errorloginTime = reader.GetInt32(4);




                        if (3 > errorloginTime)
                        {
                            LoginCheck();


                        }
                        else if (3 == errorloginTime)
                        {
                            //记录当前时间
                            //DateTime now = DateTime.Now;
                            reader.Close();
                            cmd.CommandText = "Update T_User set LastTime=@time where UserName=@name";
                            cmd.Parameters.Add(new SqlParameter("@time", DateTime.Now));
                            cmd.ExecuteNonQuery();


                            LoginCheck();
                        }


                        else if (3 < errorloginTime)
                        {
                            reader.Close();
                            //获取上次登陆时间
                            cmd.CommandText = "select LastTime from T_User where UserName=@name";


                            DateTime lastTime = (DateTime)cmd.ExecuteScalar();


                            //比较时间
                            DateTime now = DateTime.Now;
                            System.TimeSpan ts = now - lastTime;


                            //获取分钟
                            int minute = ts.Minutes;


                            if (15 < minute)
                            {
                                LoginCheck();
                            }
                            else
                            {
                                MessageBox.Show("登陆同一用户已错误3次,请稍后再试");
                            }


                            //MessageBox.Show(lastTime.ToString());




                        }


                    }
                }
            }






            #endregion
        }




        private void LoginCheck()
        {
            #region 登陆成功Errortime置0,失败ErrorTime+1
            using (SqlConnection conn = new SqlConnection(
                "Data Source=127.0.0.1;Initial Catalog=MyTest;User Id=sa;Password=solora020"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "Select * from T_User where UserName=@name and PassWord=@psd";
                    cmd.Parameters.Add(new SqlParameter("@name", txtusername.Text.Trim()));
                    cmd.Parameters.Add(new SqlParameter("@psd", password.Password));


                    SqlDataReader reader = cmd.ExecuteReader();


                    if (reader.Read())
                    {
                        MessageBox.Show("登陆成功");
                        //errorTime置0
                        reader.Close();
                        cmd.CommandText = "update T_User set ErrorTimes=0 where UserName=@name";
                        //cmd.Parameters.Add(new SqlParameter("@name", txtusername.Text.Trim()));
                        cmd.ExecuteNonQuery();
                    }
                    else


                    {
                        reader.Close();
                        MessageBox.Show("登陆失败");
                        cmd.CommandText = "update T_User set ErrorTimes=ErrorTimes+1 where UserName=@name";
                        //cmd.Parameters.Add(new SqlParameter("@name", txtusername.Text.Trim()));
                        cmd.ExecuteNonQuery();
 
                    }
                }
               
            }


            #endregion

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多