使用session实现用户登录时密码输入错误锁定账号

〆天天向上 2013-09-11 09:48:12
用户登录的时候,在短时间内密码连续输错3次,账号被锁定,是怎么实现的呢?
比如1分钟内连续输入3次错误密码,账号锁定。而一小时内输错3次,虽然也是连续的,却不锁定。
这个是怎么实现的呢?
...全文
865 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumlee 2013-09-13
  • 打赏
  • 举报
回复
搞这么麻烦,还不如加个验证码来的有效。
_肉君 2013-09-13
  • 打赏
  • 举报
回复
4楼正解。在数据库中设定相应的字段,用以记录相关的验证出错信息。然后根据逻辑判断,将字段内容进行相应的内容处理。
RAY_MAO 2013-09-13
  • 打赏
  • 举报
回复
引用 7 楼 hh_insist 的回复:
4楼可以在详细些吗
不要求所有的登陆记录都做记录的话那就放倒applicationcontext里吧,用hashmap维护,loginName做key map做value 这个map 里面记录 一个锁定状态,锁定时间,还有一个list 或 linkedList 记录最近 n-1 次非法登陆,n=几次非法登陆就锁定,linkedlist 首尾操作效率比较高。然后剩下的就是登陆判断以及维护这张map了
RAY_MAO 2013-09-13
  • 打赏
  • 举报
回复
引用 11 楼 BuDongOrz 的回复:
[quote=引用 10 楼 rumlee 的回复:] [quote=引用 8 楼 BuDongOrz 的回复:] [quote=引用 6 楼 rumlee 的回复:] [quote=引用 2 楼 berg369 的回复:] 在一个session周期内,记录输错的次数,超过则锁定;而会话过期后,新的会话则重新记录次数,所以,这没有什么特别的技术,只是用session记录输错的次数而已。
是的,就是这样很简单的啊。只是用session记录输错次数而已,但是需要注意的是除了记录次数之外,另外需要记录每次出错的时间,最红通过出错时间一判断就可以了。[/quote] 如果我输入一次错误了,然后就把浏览器关掉,重开,session的记录还有在吗?[/quote] 浏览器关掉,session当然不在了,不过这个对你这个应用来说应该影响不大吧,因为你只要求一分钟输错不超过3次,关掉重开差不多也需要一分钟。 如果希望浏览器关掉还能够保存的话,建议用cookie。[/quote] 呃...重开浏览器要一分钟? session是一次会话,关掉浏览器后session不在了,所以这样肯定就存在一定的不严谨性。所以我认为就放在session里是不严谨的。平均20秒重开一次浏览器是绰绰有余的,所以还是会有可能20秒内进行一次提交表单验证的。所以我觉得,要不就放在Application,要不就写数据库记录都可以。[/quote] 如果是我果断关掉cookie
_肉君 2013-09-13
  • 打赏
  • 举报
回复
引用 10 楼 rumlee 的回复:
[quote=引用 8 楼 BuDongOrz 的回复:] [quote=引用 6 楼 rumlee 的回复:] [quote=引用 2 楼 berg369 的回复:] 在一个session周期内,记录输错的次数,超过则锁定;而会话过期后,新的会话则重新记录次数,所以,这没有什么特别的技术,只是用session记录输错的次数而已。
是的,就是这样很简单的啊。只是用session记录输错次数而已,但是需要注意的是除了记录次数之外,另外需要记录每次出错的时间,最红通过出错时间一判断就可以了。[/quote] 如果我输入一次错误了,然后就把浏览器关掉,重开,session的记录还有在吗?[/quote] 浏览器关掉,session当然不在了,不过这个对你这个应用来说应该影响不大吧,因为你只要求一分钟输错不超过3次,关掉重开差不多也需要一分钟。 如果希望浏览器关掉还能够保存的话,建议用cookie。[/quote] 呃...重开浏览器要一分钟? session是一次会话,关掉浏览器后session不在了,所以这样肯定就存在一定的不严谨性。所以我认为就放在session里是不严谨的。平均20秒重开一次浏览器是绰绰有余的,所以还是会有可能20秒内进行一次提交表单验证的。所以我觉得,要不就放在Application,要不就写数据库记录都可以。
rumlee 2013-09-13
  • 打赏
  • 举报
回复
引用 8 楼 BuDongOrz 的回复:
[quote=引用 6 楼 rumlee 的回复:] [quote=引用 2 楼 berg369 的回复:] 在一个session周期内,记录输错的次数,超过则锁定;而会话过期后,新的会话则重新记录次数,所以,这没有什么特别的技术,只是用session记录输错的次数而已。
是的,就是这样很简单的啊。只是用session记录输错次数而已,但是需要注意的是除了记录次数之外,另外需要记录每次出错的时间,最红通过出错时间一判断就可以了。[/quote] 如果我输入一次错误了,然后就把浏览器关掉,重开,session的记录还有在吗?[/quote] 浏览器关掉,session当然不在了,不过这个对你这个应用来说应该影响不大吧,因为你只要求一分钟输错不超过3次,关掉重开差不多也需要一分钟。 如果希望浏览器关掉还能够保存的话,建议用cookie。
_肉君 2013-09-13
  • 打赏
  • 举报
回复
引用 7 楼 hh_insist 的回复:
4楼可以在详细些吗
记录最新的两次出错记录在数据表中,如果第三次出错了(当然,要判断表中是否有了两条出错记录了),就与第一次出错时的时刻比较,如果相距小于1分钟,则可以锁定该账号(对应处理);如果第三次与第一次的比较,大于1分钟,则把第一次的记录替换掉,一、二次的记录对应换成二、三次出错的记录。以后都这样判断。然后后面在未被锁定的情况下,输入正确了可以将一、二次记录清掉(看系统要求了)。(可能有说错或说漏的地方,但大概就是这么处理的)
_肉君 2013-09-13
  • 打赏
  • 举报
回复
引用 6 楼 rumlee 的回复:
[quote=引用 2 楼 berg369 的回复:] 在一个session周期内,记录输错的次数,超过则锁定;而会话过期后,新的会话则重新记录次数,所以,这没有什么特别的技术,只是用session记录输错的次数而已。
是的,就是这样很简单的啊。只是用session记录输错次数而已,但是需要注意的是除了记录次数之外,另外需要记录每次出错的时间,最红通过出错时间一判断就可以了。[/quote] 如果我输入一次错误了,然后就把浏览器关掉,重开,session的记录还有在吗?
hh_insist 2013-09-13
  • 打赏
  • 举报
回复
4楼可以在详细些吗
rumlee 2013-09-13
  • 打赏
  • 举报
回复
引用 2 楼 berg369 的回复:
在一个session周期内,记录输错的次数,超过则锁定;而会话过期后,新的会话则重新记录次数,所以,这没有什么特别的技术,只是用session记录输错的次数而已。
是的,就是这样很简单的啊。只是用session记录输错次数而已,但是需要注意的是除了记录次数之外,另外需要记录每次出错的时间,最红通过出错时间一判断就可以了。
RAY_MAO 2013-09-12
  • 打赏
  • 举报
回复
这个建议记录到数据库或applicationcontext中去session中记录没有多大意义,用登录名做key记录最近两次非法登陆的时间就行第三次登陆的时候判断一下时间间隔,记录账户的锁定状态和锁定时间
colie_li 2013-09-12
  • 打赏
  • 举报
回复
可以通过数据库的方式去实现,记录输错的时间,然后登陆的时候校验下时间是否正确
berg369 2013-09-12
  • 打赏
  • 举报
回复
在一个session周期内,记录输错的次数,超过则锁定;而会话过期后,新的会话则重新记录次数,所以,这没有什么特别的技术,只是用session记录输错的次数而已。
fuleihuoxian 2013-09-11
  • 打赏
  • 举报
回复
定义一个拦截器。先检查User属性。决定是否跳转邮箱认定什么的 不就行了么

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧