300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 用memcache如何做用户登录失败限制?

用memcache如何做用户登录失败限制?

时间:2021-09-22 01:33:38

相关推荐

用memcache如何做用户登录失败限制?

后端开发|php教程

php,memcached

后端开发-php教程

我要限制用户一小时内登陆只能密码输错12次,如果在最近一小时内累计密码错误超过12次就直接不能登录,如何用memcache实现,不用mysql,因为碰到mysql的login log表越来越大,之前mysql的实现方式太慢了

社区o2o 源码,vscode安装版本,ubuntu apt库,tomcat出文件log,淘宝销量爬虫,php 输出条数据,咸宁本地seo推广哪家好,asp网站餐饮系统源码,漂亮的后台模板下载lzw

商品展示页的网站源码,更改ubuntu系统语言,Tomcat讯飞语音识别,pytars爬虫教学,16天学会php,张家界搜狗seo优化服务商lzw

回复内容:

手机qq完整源码,vscode和node开发,ubuntu云镜像,tomcat 修改启动内存,bp爬虫,php 图片拼接,流量运营中的seo,个人h5网站源码,韩国好看云电影网站模板下载 迅雷下载地址lzw

我要限制用户一小时内登陆只能密码输错12次,如果在最近一小时内累计密码错误超过12次就直接不能登录,如何用memcache实现,不用mysql,因为碰到mysql的login log表越来越大,之前mysql的实现方式太慢了

如果你不需要记录用户登陆的历史详情,只是想要限制登陆次数就非常简单

为每个用户创建一个特别的key(举个例子,user_login_count_${用户ID}

每次登陆的时候拿到用户名,就去memcache去取这个key的value,如果发现其值已经超过12,则在此时报错说明只能尝试12次

如果不存在这个key,那么通过set新建,并把值记为1,expire时间设置为3600秒

如果登录失败,那么对这个key对应的value进行increment的操作,并重新设置超时时间为3600秒

如果登陆成功,则直接清除这个key的内容

因为 @vimac 的答案没有解决最近一小时问题,以下仅提供个思路,细节还可以完善

get($key) or array();$allow_times = 12;if(! checkAllowTimes($login_failed, $allow_times)){ throw new Exception("allow times max", 1);}if(! passValid($user_id, $password)){ array_unshift($login_failed, time()); // 最多存 12 条记录 if(count($login_failed) > $allow_times){ $login_failed = array_slice($login_failed, 0, $allow_times);} $mem->set($key, $login_failed, 3600);}else{ // 登录成功删除失败记录,取决于是连续失败还是累计失败? $mem->delete($key); // ...}function passValid($user_id, $password){ // ... // 伪代码 return true or false;}function checkAllowTimes($login_failed, $allow_times){ $last_hour = strtotime(1 hours ago); for($i = 0; $i = $allow_times - 1){ return false; } // 1 小时前的登录记录不检索 if($login_failed[$i] <= $last_hour){ return true; } } return true;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。