iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php登录失败的处理方法
  • 812
分享到

php登录失败的处理方法

2023-06-14 07:06:52 812人浏览 安东尼
摘要

这篇文章给大家分享的是有关PHP登录失败的处理方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php登录失败的处理方法:首先创建一个表负责记录用户登录的信息;然后从user_login_info表查询最近30分

这篇文章给大家分享的是有关PHP登录失败的处理方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

php登录失败的处理方法:首先创建一个表负责记录用户登录的信息;然后从user_login_info表查询最近30分钟内有没有相关密码错误的记录;接着统计记录总条数是否达到设定的错误次数;最后设置登录密码错误次数限制即可。

PHP实现登录失败次数限制

登录密码错误次数限制

安全对每个网站的重要性,不言自明。 其中,登陆又是网站中比较容易受到攻击的一个地方,那么我们如何对登陆功能的安全性加强呢?

我们先来看一些知名的网站是如何做的

Github

GitHub网站同一个账号在同一个IP地址连续密码输错一定次数后,这个账号是会被定30分钟的。

github这么做的主要原因,我觉得主要基于以下考虑:

防止用户的账号密码被暴力破解

实现思路

既然这么多网站的登陆功能都这么个功能,那么具体如何实现的。下面,就具体说说。

思路

需要一个表(user_login_info)负责记录用户登录的信息,不管登录成功还是失败都记录。并且登陆失败还是成功需要能够区分开来。

每次登陆时,都先从user_login_info表查询最近30分钟内(这里假设密码错误次数达到5次后,禁用用户30分钟)有没有相关密码错误的记录,然后统计一下记录总条数是否达到设定的错误次数。

如果在相同IP下,同一个用户,在30分钟内密码错误次数达到设定的错误次数,就不让用户登录了。

【推荐:PHP视频教程

具体代码与及表设计

表设计

user_login_info表

   CREATE TABLE `user_login_info` (       `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT  NOT NULL,       `uid` int(10) UNSIGNED NOT NULL,       `ipaddr` int(10) UNSIGNED NOT NULL COMMENT '用户登陆IP',       `logintime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP        COMMENT '用户登陆时间',       `pass_wrong_time_status` tinyint(10) UNSIGNED NOT NULL COMMENT '登陆密码错误状态'        COMMENT '0 正确 2错误'    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;user表(用户表)   CREATE TABLE `user` (      `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,      `name` varchar(100) NOT NULL COMMENT '用户名',      `email` varchar(100) NOT NULL,      `pass` varchar(255) NOT NULL,      `status` tinyint(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '1启用 2禁用',       PRIMARY key(id)    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;核心代码<?php class Login{     protected $pdo;     public function __construct()    {        //链接数据库        $this->connectDB();    }     protected function connectDB()    {        $dsn = "mysql:host=localhost;dbname=demo;charset=utf8";        $this->pdo = new PDO($dsn, 'root', 'root');    }     //显示登录页    public function loginPage()    {          include_once('./html/login.html');     }     //接受用户数据做登录    public function handlerLogin()    {         $email = $_POST['email'];        $pass = $_POST['pass'];         //根据用户提交数据查询用户信息        $sql = "select id,name,pass,reg_time from user where email = ?";        $stmt = $this->pdo->prepare($sql);        $stmt->execute([$email]);         $userData = $stmt->fetch(\PDO::FETCH_ASSOC);         //没有对应邮箱        if ( empty($userData) ) {             echo '登录失败1';             echo '<meta Http-equiv="refresh" content="2;url=./login.php">';            exit;        }         //检查用户最近30分钟密码错误次数        $res = $this->checkPassWrongTime($userData['id']);         //错误次数超过限制次数        if ( $res === false ) {            echo '你刚刚输错很多次密码,为了保证账户安全,系统已经将您账号锁定30min';             echo '<meta http-equiv="refresh" content="2;url=./login.php">';            exit;        }          //判断密码是否正确        $isRightPass = passWord_verify($pass, $userData['pass']);         //登录成功        if ( $isRightPass ) {             echo '登录成功';            exit;        } else {             //记录密码错误次数            $this->recordPassWrongTime($userData['id']);             echo '登录失败2';            echo '<meta http-equiv="refresh" content="2;url=./login.php">';            exit;        }     }     //记录密码输出信息    protected function recordPassWrongTime($uid)    {         //ip2long()函数可以将IP地址转换成数字        $ip = ip2long( $_SERVER['REMOTE_ADDR'] );         $time = date('Y-m-d H:i:s');        $sql = "insert into user_login_info(uid,ipaddr,logintime,pass_wrong_time_status) values($uid,$ip,'{$time}',2)";          $stmt = $this->pdo->prepare($sql);         $stmt->execute();    }         protected function checkPassWrongTime($uid, $min=30, $wTime=3)    {         if ( empty($uid) ) {             throw new \Exception("第一个参数不能为空");         }         $time = time();        $prevTime = time() - $min*60;         //用户所在登录ip        $ip = ip2long( $_SERVER['REMOTE_ADDR'] );          //pass_wrong_time_status代表用户输出了密码        $sql = "select * from user_login_info where uid={$uid} and pass_wrong_time_status=2 and UNIX_TIMESTAMP(logintime) between $prevTime and $time and ipaddr=$ip";         $stmt = $this->pdo->prepare($sql);         $stmt->execute();         $data = $stmt->fetchAll(\PDO::FETCH_ASSOC);          //统计错误次数        $wrongTime = count($data);         //判断错误次数是否超过限制次数        if ( $wrongTime > $wTime ) {            return false;        }         return $wrongTime;     }     public function __call($methodName, $params)    {         echo '访问的页面不存在','<a href="./login.php">返回登录页</a>';    }} $a = @$_GET['a']?$_GET['a']:'loginPage';  $login = new Login(); $login->$a();

感谢各位的阅读!关于“php登录失败的处理方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: php登录失败的处理方法

本文链接: https://www.lsjlt.com/news/268597.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php登录失败的处理方法
    这篇文章给大家分享的是有关php登录失败的处理方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php登录失败的处理方法:首先创建一个表负责记录用户登录的信息;然后从user_login_info表查询最近30分...
    99+
    2023-06-14
  • linux登录失败处理的方法有哪些
    当Linux登录失败时,可以采取以下几种处理方法: 检查用户名和密码:确认输入的用户名和密码是否正确。特别注意键盘布局是否正确,...
    99+
    2023-10-25
    linux
  • MySQL启/停 登录失败处理功能
    写在开头 最近在处理了安全加固的问题,有一条要求如下: 可采取结束会话、限制非法登录次数和自动退出等措施经核查,执行show variables like ‘%connection_control%’,结果为:connection_cont...
    99+
    2023-08-22
    mysql 数据库
  • PostgreSQL用户登录失败自动锁定的处理方案
    墨墨导读:PostgreSQL使用session_exec插件实现用户密码验证失败几次后自动锁定,本文介绍一种处理方案。 一、插件session_exec安装配置篇 下载插件并编译安...
    99+
    2024-04-02
  • PHP多设备登录失败的解决方案
    在日常的开发中,多设备登录是一种常见的需求。多设备登录的场合是指用户可以同时使用多台设备登录同一个账号,但是这样也会带来一些风险,如账号被恶意攻击等。在PHP开发中,如何解决多设备登录失败的问题?本文将会从以下几个方面进行讨论。1、了解多设...
    99+
    2023-05-14
    php
  • PHP启动失败的原因及处理方法
    PHP启动失败的原因及处理方法 PHP是一种广泛应用于服务器端脚本语言,它的灵活性和强大功能使其成为许多网站和应用程序的首选。然而,有时候我们在部署或使用PHP时会遇到PHP启动失败的...
    99+
    2024-03-12
    错误处理方法 php启动失败 启动原因 php脚本
  • Discuz登录失败后应该如何处理?
    Discuz是一款知名的开源论坛系统,用户可以在上面进行交流讨论,并且有着相当丰富的功能和扩展模块。然而,在使用Discuz的过程中,有时候会遇到登录失败的情况,这可能是由于网络问题、...
    99+
    2024-03-10
    重定向 错误处理 安全性 网络问题
  • BACKUP DATABASE 失败的处理方法
    RMAN> BACKUP DATABASE;启动 backup 于 03-6月 -14使用通道 ORA_DISK_1通道 ORA_DISK_1: 启动全部数据文件备份集通道 ORA_DISK_1: 正...
    99+
    2024-04-02
  • mysql8中phpmyadmin密码登录失败的解决方法
    这篇文章给大家分享的是有关mysql8中phpmyadmin密码登录失败的解决方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysql8 phpmyadmin密码登录失败云服...
    99+
    2024-04-02
  • 监测Linux上失败的登录方法是什么
    这篇文章的内容主要围绕监测Linux上失败的登录方法是什么进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!在Linux服务器上重复的失败登录尝试可能表...
    99+
    2023-06-28
  • 电脑登录云服务器失败的解决方法
    1. 检查网络连接 首先,确保你的电脑与云服务器之间的网络连接是正常的。你可以尝试访问其他网站或使用其他网络应用程序来确认你的网络连接是否正常。如果网络连接存在问题,你可以尝试重新连接网络或联系网络管理员解决问题。 2. 检查登录凭证 确...
    99+
    2023-10-27
    解决方法 服务器 电脑
  • mysql5.7.20第一次登录失败的快速解决方法
    一,将介绍如何 (1)mysql5.7是有默认密码的 查找默认密码 grep 'temporary password' /var/log/mysqld.log ...
    99+
    2024-04-02
  • Discuz登录失败的原因分析与解决方法
    Discuz登录失败的原因分析与解决方法 在使用Discuz论坛系统时,有时会遇到登录失败的情况,这可能会给用户带来困扰。本文将对Discuz登录失败的原因进行分析,并提供解决方法,同...
    99+
    2024-03-09
    解决方法 discuz登录 分析原因 网络问题
  • 阿里云SQL数据库登录失败的解决方法
    简介:本文将介绍阿里云SQL数据库登录失败的常见原因以及相应的解决方法,帮助用户快速恢复数据库的正常运行。 1. 检查账号和密码是否正确首先,当您在阿里云SQL数据库上登录时,首先要检查您的账号和密码是否正确。请确保您输入的用户名和密码与您...
    99+
    2024-01-19
    阿里 解决方法 数据库
  • 轻量应用服务器登录失败的解决方法
    1. 检查网络连接 登录失败可能是由于网络连接问题导致的。请确保您的设备已连接到可靠的网络,并尝试重新登录。您可以尝试使用其他设备或网络连接来验证是否存在网络问题。 2. 检查用户名和密码 请确保您输入的用户名和密码是正确的。注意区分大小...
    99+
    2023-10-27
    解决方法 服务器
  • PHP多设备登录失败如何解决
    本篇内容介绍了“PHP多设备登录失败如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、了解多设备登录的原理多设备登录是指用户可以在多...
    99+
    2023-07-05
  • php session_start 失败的解决方法
    本篇内容介绍了“php session_start 失败的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php session_st...
    99+
    2023-06-20
  • 手机登录腾讯云服务器失败的解决方法
    1. 检查网络连接 首先,当你尝试使用手机登录腾讯云服务器时,确保你的手机已连接到可靠的网络。你可以尝试连接其他网站或应用程序来确认你的网络连接是否正常。如果你的网络连接存在问题,你可以尝试重新连接或更换网络。 2. 检查账号和密码 确保...
    99+
    2023-10-27
    腾讯 解决方法 服务器
  • 解决阿里云服务器ECS登录失败问的方法
    在使用阿里云服务器ECS的过程中,有时会遇到登录失败的问题。本文将介绍一些常见的原因和解决方法,帮助您快速恢复对ECS的访问。1. 检查登录凭证首先,我们需要确保输入的登录凭证是正确的。请检查以下几点:确保输入的用户名和密码是正确的,并且...
    99+
    2024-01-18
    阿里 服务器 方法
  • php如何实现登录失败次数限制
    这篇“php如何实现登录失败次数限制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现登录失败次数限制”文章吧。p...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作