Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制某些分钟的登录权限_Php_Mysql - Fatal编程技术网

Php 限制某些分钟的登录权限

Php 限制某些分钟的登录权限,php,mysql,Php,Mysql,我的表格在下面。。我想执行一个操作,如果用户输入错误的密码3次,在他的帐户被锁定几分钟后。。我如何在我的状态中实现这一点 <?php session_start(); if(isset($_POST['username']) && isset($_POST['password'])){ $username = $_POST['username']; $password = $_POST['password']; $connect = mysql_connect('

我的表格在下面。。我想执行一个操作,如果用户输入错误的密码3次,在他的帐户被锁定几分钟后。。我如何在我的状态中实现这一点

<?php

session_start();

if(isset($_POST['username']) && isset($_POST['password'])){

$username = $_POST['username'];
$password = $_POST['password'];


$connect = mysql_connect('localhost', 'root', 'root');

mysql_selectdb('lr') or die('Couldnt find database');

$query = mysql_query("SELECT * FROM users WHERE username = '$username'");
$numrows = mysql_num_rows($query);

if($numrows !=0){

   while ($row = mysql_fetch_assoc($query)){

        $dbuser = $row['username'];
        $dbpass = $row['password'];

   }

   if ($username == $dbuser && $password == $dbpass){

        $_SESSION['username'] = $dbuser;
            if($_SESSION['username']){
        echo 'Welcome ' . $_SESSION['username'] . ' ! <br>';
        echo 'Click <a href = "index.php"> here </a> to log out !';


            }
   } else
        echo 'Incorrect Username or Password Combinations ';

} else
    die('That user does not exist'); 

}


?>

就像另一个用户之前说的那样,您很容易受到SQL注入的攻击。始终验证用户输入

至于你的问题,你可以使用这个数据库,然后有人可以很容易地阻止另一个用户的帐户。也可以改用会话变量。您只需要在会话中记录失败登录的次数。在3失败后,您可以设置一个会话变量,其时间戳为允许用户再次登录的时间(当前时间戳+X),并在运行SQL检查之前检查时间是否已过。 如果用户成功登录,则应清除或重置这些会话变量。 (很抱歉,我没有时间介绍您和示例,但它很容易实现。)

由鼠标垫制成,没有经过任何测试,但我希望它能给你一些提示

<?php
session_start();
define('MAX_LOGIN_ATTEMPTS',3);

if(isset($_SESSION['loginTimeout']) && $_SESSION['loginTimeout']<time()) {
    echo "You used all login attempts. Try again in a little while.";
    exit() // ups, forgot about this :)
}

if(isset($_POST['username']) && isset($_POST['password'])){
    $connect = mysql_connect('localhost', 'root', 'root');

    mysql_selectdb('lr') or die('Couldnt find database');

    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);

    $query = mysql_query("SELECT * FROM users WHERE username = '$username'");
    $numrows = mysql_num_rows($query);
    $bFail = false;

    if($numrows !=0){

       while ($row = mysql_fetch_assoc($query)){

            $dbuser = $row['username'];
            $dbpass = $row['password'];

       }

       if ($username == $dbuser && $password == $dbpass){
    unset($_SESSION['loginTimeout']);
            $_SESSION['username'] = $dbuser;
            if($_SESSION['username']){
                echo 'Welcome ' . $_SESSION['username'] . ' ! <br>';
                echo 'Click <a href = "index.php"> here </a> to log out !';
                    }
       } else {
          echo 'Incorrect Username or Password Combinations ';
          $bFail = true;
       }

    } else {
        die('That user does not exist');
        $bFail = true; 
    }

    if($bFail) {
        if(isset($_SESSION['loginAttempts'])) $_SESSION['loginAttempts']++;
        else $_SESSION['loginAttempts'] = 1;

        if($_SESSION['loginAttempts']>MAX_LOGIN_ATTEMPTS) {
           // one hour timeout
           $_SESSION['loginTimeout'] = time() + 1*60*60;
        }
    }
}




?>


将summat插入数据库以实现此目的-就像上次尝试的人一样,它是否在机会窗口内如何?我一开始就不理解你,你在sql注入方面有问题。您需要记录该用户名在x秒内尝试过的事实。如何做到这一点?你能给我一个片段吗?获取他们最后一次尝试的时间(你将该位存储在数据库中)。如果在当前时间内发生3分钟的爆炸。如果没有,则获取最后一个值。如果他们失败了,3分钟后他们最后一次尝试进入未来,请提供一个片段?:/@yetin-我猜你希望有人为你写代码。有点不合适。指针已被删除given@Jorge我已经测试过了。。但是当我用错误的pw登录超过3次时,它不会阻止medid您添加我上次添加的出口吗?是的,我添加了出口();首先是my index.php,其中包含字段和按钮。。当我点击提交时,如果密码正确,它会引导我进入另一个页面。但是,在3次尝试失败后,如何阻止访问?