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