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在3次登录失败后锁定用户10分钟_Php_Sql_Session_Login_Limit - Fatal编程技术网

PHP在3次登录失败后锁定用户10分钟

PHP在3次登录失败后锁定用户10分钟,php,sql,session,login,limit,Php,Sql,Session,Login,Limit,我几乎完成了登录系统的代码。我有它的工作,一个用户得到3次尝试登录,并收到一条消息,每次说,他们有一定数量的尝试离开。我还为他们进行了编码,如果他们已登录5分钟,他们将自动注销。我正在努力研究如何根据会话变量将用户锁定10分钟。有人能告诉我在哪里设置会话变量['LoginID']以及它需要处于什么条件吗?因为目前,我发现一个错误,它是一个未定义的变量。如果有人能帮我处理当前的代码,而不是提供一个完全不同的方法,那就太好了,因为那样我就能真正理解它了。这是我的密码: //careMarkBase

我几乎完成了登录系统的代码。我有它的工作,一个用户得到3次尝试登录,并收到一条消息,每次说,他们有一定数量的尝试离开。我还为他们进行了编码,如果他们已登录5分钟,他们将自动注销。我正在努力研究如何根据会话变量将用户锁定10分钟。有人能告诉我在哪里设置会话变量['LoginID']以及它需要处于什么条件吗?因为目前,我发现一个错误,它是一个未定义的变量。如果有人能帮我处理当前的代码,而不是提供一个完全不同的方法,那就太好了,因为那样我就能真正理解它了。这是我的密码:

//careMarkBase starts a session, connects to the DB and has the following code for logging out a user after 5 minutes(which works)
$duration = (5 * 60);
if(isset($_SESSION['started'])){

    $time = ($duration - (time() - $_SESSION['started']));

    if($time <= 0){

        session_unset();
        session_destroy();          
    }
}
else{

  $_SESSION['started'] = time();
}
//careMarkBase启动会话,连接到数据库,并具有以下代码,用于在5分钟后注销用户(有效)
$duration=(5*60);
如果(isset($\ U会话['started'])){
$time=($duration-(time()-$\会话['started']);

如果($time在验证帐户信息后,检查是否应将其锁定

        if(mysql_num_rows($checkloginEmp) == 1)
        {
            // Check if they're locked out
            $checkLockout = mysql_query("SELECT * FROM login
                                         WHERE LoginID = $userID
                                         AND failed_login_attempts >= 3
                                         AND last_failed_login > DATE_SUB(NOW(), INTERVAL 10 MINUTE)" or die (mysql_error());
            if (mysql_num_rows($checkLockout) > 0) {
                echo "Locked out!";
            } else {
                $row = mysql_fetch_array($checkloginEmp);
                $_SESSION['Username'] = $userID;
                $_SESSION['FName'] = $row['FName'];
                $_SESSION['SName'] = $row['SName'];
                $_SESSION['LoggedIn'] = 1;
            }

            echo "<meta http-equiv='refresh' content='1;CareMarkLogin2.php'/>";
        }
if(mysql\u num\u行($checkloginEmp)==1)
{
//检查他们是否被锁在外面
$checklocket=mysql\u查询(“从登录中选择*
其中LoginID=$userID
和失败的\u登录\u尝试>=3
最后一次登录失败>日期订阅(现在(),间隔10分钟)或死亡(mysql错误());
如果(mysql_num_rows($checklocket)>0){
回声“锁定!”;
}否则{
$row=mysql\u fetch\u数组($checkloginEmp);
$\会话['Username']=$userID;
$\会话['FName']=$row['FName'];
$\会话['SName']=$row['SName'];
$\会话['LoggedIn']=1;
}
回声“;
}

或者,您可以在验证密码之前检查此项。

谢谢您的评论,我有点困惑。loginID不等于用户ID。我遇到的主要问题是如何设置$\u会话['loginID']到和哪里…为什么要使用不同的ID?如果他们还没有登录,你唯一需要使用的ID就是用户名,这就是超时应该与之关联的ID。我更改了布局,因为我太困惑了,但谢谢!
        if(mysql_num_rows($checkloginEmp) == 1)
        {
            // Check if they're locked out
            $checkLockout = mysql_query("SELECT * FROM login
                                         WHERE LoginID = $userID
                                         AND failed_login_attempts >= 3
                                         AND last_failed_login > DATE_SUB(NOW(), INTERVAL 10 MINUTE)" or die (mysql_error());
            if (mysql_num_rows($checkLockout) > 0) {
                echo "Locked out!";
            } else {
                $row = mysql_fetch_array($checkloginEmp);
                $_SESSION['Username'] = $userID;
                $_SESSION['FName'] = $row['FName'];
                $_SESSION['SName'] = $row['SName'];
                $_SESSION['LoggedIn'] = 1;
            }

            echo "<meta http-equiv='refresh' content='1;CareMarkLogin2.php'/>";
        }