Проверка сеанса входа в систему с использованием подготовленных операторов PHP, Ajax и MySQLi - PullRequest
0 голосов
/ 30 апреля 2018

Я работал над этой формой , но я получил много указателей на использование подготовленного оператора, чтобы избежать sql инъекций . Во время исследования я наткнулся на этот урок . Обратите внимание, что я внес небольшие изменения в исходный код, чтобы он работал с моей существующей базой данных.

Для того, чтобы он работал, он использует 5 файлов:

login.js

$(document).ready(function(){
    $error = $('<center><label style = "color:#ff0000;">Invalid email or password</label></center>');
    $error2 = $('<center><label style = "color:#ff0000;">Email not found!</label></center>');
    $success = $('<center><label style = "color:#00ff00;">Successfully login!</label></center>');
    $loading = $('<center><img src = "loading.gif" height = "5px" width = "100%"/></center>');
    $('#login').on('click', function(){
        $error.remove();
        $error2.remove();
        $email = $('#email').val();
        $password = $('#password').val();
        if($email == "" && $password == ""){
            $error.appendTo('#result');
        }else{
            $loading.appendTo('#result');
            setTimeout(function(){
                $loading.remove();
                $.post('validator.php', {email: $email, password: $password},
                    function(result){
                        if(result == "Success"){
                            $('#email').val('');
                            $('#password').val('');
                            $success.appendTo('#result');
                            setTimeout(function(){
                                $success.remove();
                                window.location = 'home.php';
                            }, 1000);
                        }else{
                            $('#email').val('');
                            $('#password').val('');
                            $error2.appendTo('#result');
                        }
                    }
                )   
            }, 3000);   
        }
    });
});

index.php

<!DOCTYPE html>
<?php
    require 'connect.php';
?>
<html lang = "eng">
    <head>
        <meta charset = "UTF-8" />
        <style>
            #content{
                background-color: #ffeecc;
                width:280px;
                height:110px;
                margin: 100px auto;
                padding:10px;
                border-radius:2px;
                -webkit-box-shadow:0px 0px 30px 3px #000;
            }
        </style>
    </head>
<body>
    <center><h2>Creating a Simple Login using Ajax/MySQLi Prepared Statement</h2></center>
    <div id = "content">    
        <form method = "POST">
            <table> 
                <tr>
                    <td><label>Username:</label></td>
                    <td><input type = "text" id = "email" name= "email"></td>
                </tr>   
                <tr>    
                    <td><label>Password:</label></td>
                    <td><input type = "password" id =  "password" name =  "password"></td>
                </tr>
                <tr>
                    <td colspan = "2"><br /></td>
                </tr>
                <tr>
                    <td colspan = "2"><button type = "button" style = "width:100%;" id = "login">Login</button></td>
                </tr>
                <tr>
                    <td colspan = "2"><div id = "result"></div></td>
                </tr>
            </table>
        </form>
    </div>
</body> 
<script src = "jquery-3.1.1.js"></script>
<script src = "login.js"></script>
</html>

connect.php

<?php
    $conn = new mysqli('localhost', 'root', '', 'formularios');
    if($conn->connect_error){
        die("Fatal Error: Can't connect to database: ". $conn->connect_error);
    }
?>

home.php

    <!DOCTYPE html>
    <?php
        require 'connect.php';
    ?>
    <html lang = "eng">
        <head>
            <meta charset = "UTF-8" />
            <style>
                #content{
                    background-color: #ffeecc;
                    width:280px;
                    height:110px;
                    margin: 100px auto;
                    padding:10px;
                    border-radius:2px;
                    -webkit-box-shadow:0px 0px 30px 3px #000;
                }
            </style>
        </head>
    <body>
        <center><h2>Creating a Simple Login using Ajax/MySQLi Prepared Statement</h2></center>
        <div id = "content">    
            <center><h2>Welcome!</h2></center>
            <center><a href = "index.php" style = "text-decoration:none;">Back</a></center>
        </div>
    </body> 
    <script src = "jquery-3.1.1.js"></script>
    <script src = "login.js"></script>
    </html>

И validator.php

<?php
    require_once 'connect.php';
    $email = $_POST['email'];
    $password = $_POST['password'];
    $stmt = $conn->prepare("SELECT * FROM `usuarios` WHERE email = '$email' && `password` = '$password'") or die(mysqli_error());
    if($stmt->execute()){
        $result = $stmt->get_result();
        $num_rows = $result->num_rows;
    }
    if($num_rows > 0){
        echo "Success";
    }else{
        echo "Error";
    }
?>

И это работает как шарм. Теперь я хотел бы знать, как я могу проверить сессию. Я имею в виду, я включил кнопку в home.php, чтобы пользователь мог выйти из системы. И я хочу сделать home.php доступным только для зарегистрированных пользователей в моей базе данных. На этом сайте не будет сайта «регистрации», ИТ-менеджеры добавят учетные записи. Я видел, что если я нажму кнопку «Назад» после того, как нажму кнопку выхода, она все равно позволит мне увидеть содержимое этой страницы. Что я должен изменить в этих сценариях, чтобы уничтожить существующий сеанс и заставить пользователей войти в систему, когда / если они вручную получают доступ home.php?

Кнопка выхода из системы:

<a href="index.php" class="btn-primary" id="logout" name="logout">Log Out/a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...