Мой сайт автоматически создает сеанс пользователя, сохраненного в базе данных - PullRequest
0 голосов
/ 21 мая 2019

Я создал скрипт входа в систему с использованием php и использую базу данных MySQL для хранения пользовательских данных. Все работало нормально, пока я не узнал, что один из моих друзей (чья учетная запись также создана как я в базе данных) позвонил мне и сказал, что мой профиль автоматически загружается на его телефон. Как это вообще возможно, если мои данные сеанса или чей-либо сеанс не могут быть созданы без заполнения формы входа в систему с соответствующими учетными данными!?

Помоги мне с этим! Так как это главный цикл с безопасностью пользовательских данных без их согласия, как они могут быть доступны с чужого телефона !!

Создание сессии через login.php

session_start();
if (isset($_POST['email']) and isset($_POST['password'])){
$email = $_POST['email'];
$password = $_POST['password'];
$query = "SELECT * FROM `users` WHERE email='$email' and password='$password'";
$result = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($result) > 0){
$_SESSION['email'] = $email;
$_SESSION['id'] = $id;
echo "You are logged in.";
header("Location: index.php?log=success");
unset($_POST);
}
else{
echo " Something went wrong ";
}
}

1 Ответ

1 голос
/ 21 мая 2019

Вы присваиваете $_SESSION['id'] значение $id, но нигде в вашем коде вы не указываете значение $id. Это то, что приводит к тому, что ваши сеансы перепутаны, поскольку каждому дается одинаковый идентификатор null.

Получите фактический идентификатор пользователя из базы данных и используйте это значение в $_SESSION['id'], и ваша проблема исправлена. См. Ниже, например:

/* Start the session */
session_start();

/* Check if the user has submitted the login form $_POST */
if (isset($_POST['email']) and isset($_POST['password'])){

    /* Get the values of $_POST */
    $email = $_POST['email'];
    $password = $_POST['password'];

    /* Create the SQL query - Note: you should use bindings to prevent SQL injection */
    $query = "SELECT * FROM `users` WHERE email='$email' and password='$password'";

    /* Get the MySQL result */
    $result = mysql_query($query) or die(mysql_error());

    /* Check if the user was found */
    if(mysql_num_rows($result) > 0){

        /* Get the User ID from the database */
        while($row = mysql_fetch_assoc($result)){
            $id = $row['THE NAME OF YOUR ID COLUMN']; // replace with the name of your ID column in your DB
        }

        /* Set the session values */
        $_SESSION['email'] = $email;
        $_SESSION['id'] = $id;

        /* Print output */
        echo "You are logged in.";

        /* Redirect to login page */
        header("Location: index.php?log=success");

        /* Unset POSTS */
        unset($_POST);

    } else {
        /* Show login error message */
        echo " Something went wrong ";
    }
}

Кроме того, ваш код в настоящее время подвержен атакам SQL-инъекций. Чтобы предотвратить такие атаки, я бы посоветовал вам привязать ваши параметры к вашему SQL-запросу, а не вводить их напрямую. Информация о внедрении SQL

...