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

摘要:
所需的数据库字段LastLoginErrDateLoginErrtTimes 2。后台代码privateintpermitLoginTimes=5//运行失败的次数privateintintervalMinute=1//最大登录失败次数后的时间间隔protectedvoidButton_单击{stringinfo=string.Empty;//提示消息stringsql=“SELECTCOUNTFROMAdminaWHERE.ID='”+this.txtUserName.Text+“'”;DBOperardb=newDBOperator(); intcount=转换器.ToInt32//如果//用户名存在,则判断用户是否存在{sql=“SELECTa.LoginErrTimes,a.LastLoginErfDateFROMAdminaWHERE.ID='”+this.txtUserName.Text+“” ; DataTabledtTemp=db.GetDataTable;//获取用户的登录失败次数和达到最大登录时间interTimes=Convert.ToInt32///如果//已达到允许的最大登录失败次数{DateTimedtLast=Convert.to DateTime;//达到最大登录次数的时间TimeSpants1=newTimeSpan;TimeSpants2=newTimeSpan;//当前时间TimeSpants=ts2。减工期();如果//登录间隔小于登录前的指定时间{info=“please”+this.intervalMinute+“分钟!
一。需要的数据库字段
LastLoginErrDate(日期类型)【登陆失败最大次数时的时间】  
LoginErrTimes(整形,默认值为0)【登陆失败的次数】

 二。 前台代码
<div>
<asp:TextBox runat="server"></asp:TextBox><br />
<asp:TextBox runat="server"></asp:TextBox>
<asp:Button 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>");
}
}

免责声明:文章转载自《限定登录失败次数,超过指定次数就限制登录一段时间》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mac安装rust的pyo3模块opendpi 源码分析(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL SERVER 日志传送配置要点

SQL SERVER 2005传送日志:如果是xp或者是2003系统,必须设定共享目录的权限:Winxp下局域网共享设置不同用户权限1、开始->运行->gpedit.msc->windows 设置->安全设置->本地策略->安全选项->网络访问:本地的帐户共享和安全模式,设置为:经典 — 本地帐户以自己的身份验证。...

使用Navicat Premium 12导出SQL语句并在Power Designer 16.5中生成物理模型

内容简介 本文主要介绍使用Navicat Premium 12导出建表SQL(使用MySQL数据库)文件,并在Power Designer 16.5中使用导出的SQL文件来生成物理模型的步骤。 操作步骤 1. 打开Navicat Premium,并连接上数据库,在要导出SQL文件的数据库中名键,选择转储SQL文件,然后选择仅结构,如下图: 2. 在弹出的...

(转贴)来谈谈SQL数据库中"简单的"SELECT TOP—可能有你从未注意到的细节

首先从博客园的Jerome Wong网友说起 他提出了一个这样的问题 本人写了好几年SQL语句了,从来没注意到这件事情。 例如: 数据表如下: ID  EMPNO  NAME  AGE   1   26929   Jerome   282   28394   Quince  273   20983   Green   304   27189   Mike ...

ms sql server 2005数据库日志文件过大,需要清除或者清空

数据库:ms sql server 2005 任务:ms sql server 2005数据库日志文件过大,需要清除。 方法: backup log [你的数据库名称] WITH NO_LOGbackup log [你的数据库名称] WITH TRUNCATE_ONLYDBCC SHRINKDATABASE([你的数据库名称]) 说明: backup lo...

django-将数据库数据转换成JSON格式(ORM和SQL两种情况)

最近打算搞一个自动化运维平台,所以在看Django的知识。 在实际项目开发中,遇到一个小问题:前后端发生数据交互主流采用的是JSON。前端传数据到服务器端比较简单,稍微麻烦的是服务器端传JSON到前端。 首先数据是从数据库中获取的,Django默认使用的是ORM技术,但是作为一个运维人员,我其实比较反感这类抽象出来的API。因为尽管它对于开发人员来说,将数...

Sql server 卸载方法

sql server不正确卸载时,重新安装会失败,会提示各种错误:如数据库实例已存在等。。。  下面是我摸索总结出来的卸载方法,以及重装失败后的处理方法: 卸载方法:      注意:SQL Server 2005 Express 的卸载必须按照指定顺序去执行,否者将会导致后续安装失败。 1、         右键‘我的电脑,选择‘管理’,打开“计算机管理...