日期:2014-05-18  浏览次数:20718 次

控制密码输入错误次数
我想实现个功能,具体如下:
  密码输入次数的判断,并冻结账号.
  会员在一小时内 输入密码错误次数超过5次,那么账号自动锁定.30分钟可重新输入,30分钟内输入正确也不让登陆
请各位高手多多指点,给个思路或方案,有代码更好,谢谢

------解决方案--------------------
在登陆时里加一个时间与次数字段罗,查询会员登陆时间与次数,根据读取数据表中的时间与当前时间的差值来判断登陆错误次数,第一次错就记录时间并将错误次数设为一次,以后登陆时错误检查错误次数与比较时间,如果时间在30分钟以内则增加错误次数,如果错误在5次并且时间在30分钟以内就提示冻结不允许登陆罗,否则就允许登陆.超过30分钟后错误时间记登陆错误码为第一次就可以了.


------解决方案--------------------
简单的做法就是
后台服务端做一个账号冻结的集合,一旦输入密码错误次数超过5次的账号都往这个集合里登录(把时间信息也带上),同时后台有个线程在监视登录这个集合的对象的时效,超过冻结时间,就把该账号从集合中删除。
用户验证时,先判断这个集合里是否存在相应的冻结账号,如果存在,则用户验证失败。
对LZ的式样提出点疑问?
会员在一小时内输入密码错误次数超过5次...
如果会员在一小时内,比如第1,2次登录失败,第3次成功,然后10分钟后登出,再过5分钟后登录,这时连续出现3次登录失败(加上之前2次够5次了),第4次登录成功,这样的用户该不该冻结?



------解决方案--------------------
根据你的实际情况来选择方法,如果登陆用户少的话可以用楼上的方式,并且把用户都存到SESSION中。
如果登陆的用户过多,你可以把用户存到一个临时文件中。读写本地文件肯定比数据库快。
当然30分钟这个时间判断还得做到线程里。
------解决方案--------------------
1楼的做法是经常用的一种方法,下面不妨给一下我的个人思路吧:
对于用户登录常常用数据库来管理用户的信息,这里我们不妨就在
这个管理上加上一个表(也就是实现功能你说的这个功能的表),下
面是具体思路:
表所用字段:1每次输入时间~~2当前时间~~`3错误次数~~`4重设密码时间~~~7判断是否会员
好了~~~重点来了:
-:每次输入错误就更新它输入时间和更新错误次数~~~~你控制自动锁定
它就这样也是用更新方法(放在首页): UPDATE 表 SET 是否会员=0 where datediff(' h ',-1, 
每次输入时间,now())<=当前时间,and 错误次数=5
二步:重设密码X天(这是你具体要解锁的时间)后才会自动解锁

记住重设时间和当前时间对比:更新(放在首页)UPDATE 表 SET 是否会员=1 where datediff
(' d ',-1, 重设密码时间,now())<=当前时间
只有你思路明白了,你就容易~~~~~~`
id name password logindate errornum
1 abc 123456 2006-4-23 0

上表是正常状态

登陆错误一次变成
id name password logindate errornum
1 abc 123456 2006-4-23 1

如何判断登陆错误,就以上次登陆日期logindate来判断
比如,密码错误 and logindate=date() 就 errornum+1

登陆检测代码最开始部分写上
if errornum>=N(要规定的错误次数) then response.Write "已经错误登陆N次,请30分钟后再尝试!"


不知上述对你是否有点启发,希望能帮到你。