几个小时的登录后php登录脚本无法登录

时间:2019-04-12 15:21:37

标签: php

我的网站上的登录脚本有问题,该脚本在用户注册后可以正常运行,将允许用户登录,但是经过一个小时或更长时间后,该脚本将拒绝用户登录incorrect login details(当用户密码不正确时会出现此错误),但是在这种情况下密码是正确的,我已尝试了解这种问题的原因。

再次当用户恢复密码并使用它登录时,它将登录。请我需要一些帮助 下面是登录代码

<?php
if (isset($_POST['loginaccount'])) {
    $usernamefor = $_POST['usernamelogin'];
    $passwordfor = $_POST['passwordlogin'];
    $username = mysqli_real_escape_string($connect, $usernamefor);
    $pass  = mysqli_real_escape_string($connect, $passwordfor);
    $query = "SELECT * FROM users WHERE username = '{$usernamefor}' ";
    $query = mysqli_query($connect, $query);
    $count = mysqli_num_rows($query);
    if (!$query) {
        die("QUERY FAILED". mysqli_error($connect));
    }
    if ($count <= 0) {
        $error1 = "<div class='danger'><a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a>Sorry you are not a registered user </div>";
    } else {
        while ($row = mysqli_fetch_array($query)) {
            $id = $row['id'];
            $username = $row['username'];
            $user_password = $row['password'];
        }
        $passwordloader = crypt($pass, $user_password);  

        if ($username == $username && $passwordloader == $user_password) {
            header("Location: the users dasboard");

            // the below set various sessions for users//

            $_SESSION['id'] = $id;

        } else {    
            $error2 = "<div class='danger'><a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a>Sorry your login details in incorect</div>";  
        }                                                        
    }
}

1 个答案:

答案 0 :(得分:1)

您在这里遇到拼写错误:

$username = mysqli_real_escape_string($connect, $usernamefor);
$pass  = mysqli_real_escape_string($connec, $passwordfor);

$connect不等于$connec

更多建议:

$username == $username不需要此条件,因为您正在while循环中覆盖此变量。

第二,不要在数据库中保存普通密码。

第三,我希望您为此session_start()

使用$_SESSION['id'] = $id;

第四,您的查询将仅返回1条记录,然后为什么在这里使用while循环。

第五,您的代码可以进行SQL注入,以防止使用准备好的语句。 How to use prepared statement

第六,,如果您在查询中未使用密码字段,则无需使用mysqli_real_escape_string()