Проблемы с моим оператором if () в системе входа - PullRequest
0 голосов
/ 21 января 2019


Я работаю в системе входа в систему, но у меня есть несколько проблем.
Код написан на чистом php и основан на функциях MySqli и password_verify().

Я попробовал свой код на локальном хосте XAMPP.
Итак, мой код работает хорошо, если кто-то попытается войти в систему с неправильным паролем, он покажет error_array Но когда кто-то попробует войти с реальным паролем, он будет:
А) Не повторяйте это 4 строки:

        echo $email . "<br>";
        echo $password . "<br>";
        echo $dbemail . "<br>";
        echo $dbpassword; // This is hash, and echoed for testing purposes

B) Не переходить на index.php с header()

Снимок экрана: вход с неверным паролем Logging in with wrong password
Снимок экрана: вход с реальным паролем Logging in with real password

Его 50 строк кода:

<?php  
if(isset($_POST['login_button'])) {

        $email = strtolower($_POST['log_email']);
        $email = filter_var($email, FILTER_SANITIZE_EMAIL); //sanitize email
        $_SESSION['log_email'] = $email; //Store email into session variable 
        $password = $_POST['log_password'];
        $check_database_query = mysqli_query($con, "SELECT * FROM users WHERE email='$email'");
        $login_row = mysqli_fetch_array($check_database_query);
        $dbemail = $login_row['email'];
        $dbpassword = $login_row['password'];
                //Echo $email, $password, $dbemail, $dbpassword
        echo $email . "<br>";
        echo $password . "<br>";
        echo $dbemail . "<br>";
        echo $dbpassword; // This is hash, and echoed for testing purposes
        $check_login_query = mysqli_num_rows($check_database_query);
        $row = mysqli_fetch_array($check_database_query);   
            if($check_login_query == 1){
                if(password_verify($password, $dbpassword) == true) {
                        $username = $row['username'];
                        $user_closed_query = mysqli_query($con, "SELECT * FROM users WHERE email='$email' AND user_closed='yes'");

                        if(mysqli_num_rows($user_closed_query) == 1) {
                            $reopen_account = mysqli_query($con, "UPDATE users SET user_closed='no' WHERE email='$email'");
                        }
                        $_SESSION['username'] = $username;

                                    //Be logged in after some time
                                    if(isset($_POST['check_box'])) {
                                        setcookie('email', $email, time() + 86400, "/");
                                        setcookie('password', $password, time() + 86400, "/");
                                        }
                                        $check_login_query = "";
                // Go to index
                echo "redicerting to index...";
                header("location: index.php");
                    exit();
                }
            else {
                array_push($error_array, "<span class='error'>Email or password not working</span><br>");
            }
    }
    else{
    array_push($error_array, "<span class='error'>Email or password not working</span><br>");
    }
}else{
    echo "Login button not POSTed";
}
?>

// Моя форма


    <form action="register.php" accept-charset="utf-8" method="POST">
        <div id="login_wrapper">
        <label for="email">Your e-mail</label><br>
        <label id="error_email" style="color: red;"></label>
            <input type="text" id="email" name="log_email" value="<?php
                        if(isset($_SESSION['log_email'])) {
                        echo $_SESSION['log_email'];
                        }
                        ?>" required>
                                <br>
        <label for="password">Password</label><br>
                                    <input type="password" id="password" accept-charset="utf-8" name="log_password" required>
                                <br>
                            <?php if(in_array("<span class='error'>Email or password not working</span><br>", $error_array)) echo  "<span class='error'>Email or password not working</span><br>"; ?>
                        <input type="submit" name="login_button" value="Login">
                        <input type="checkbox" name="check_box">Remember me<br>
                    <br>
                <a href="#" id="signup" class="signup">Dont have an accout? Sign Up!</a>
        </div>
    </form>

Журнал от error.log:

[Mon Jan 21 15:22:44.064393 2019] [php7:notice] [pid 11540:tid 1960] [client ::1:61860] PHP Notice:  Undefined variable: userLoggedIn in C:\\xampp\\htdocs\\drope\\index.php on line 70
[Mon Jan 21 15:43:43.163934 2019] [php7:crit] [pid 11540:tid 1960] [client ::1:63802] PHP Parse error:  syntax error, unexpected 'if' (T_IF) in C:\\xampp\\htdocs\\drope\\includes\\form_handlers\\login_handler.php on line 4

Возможно, я плохо написал if() или у меня есть ошибки в коде, но я не вижу никаких ошибок ..
Также это безопасно? Или как я могу улучшить безопасность? Может быть, не хранить хэш в файлах cookie, но как сохранить учетную запись пользователя после очистки $_SESSION s?
// Обратите внимание: проблема не в session_start, я уже начал сеанс.

1 Ответ

0 голосов
/ 21 января 2019

Кажется, проблема в файле index.php.Кажется, вы перенаправляете вас обратно на register.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...