PHP — Почему сессия все еще создается?

#php

#php

Вопрос:

Добрый день, выполняя свой проект, я застрял на странице входа в систему.

Это может быть действительно тривиальный вопрос или, может быть, даже дубликат, но я не могу найти никакого решения в Интернете.

По какой-то причине мой php-скрипт просто пропускает мою форму входа и продолжает создавать сеанс и перенаправлять на index.php .

Вот мой php-скрипт для проверки наличия электронной почты и пароля в базе данных:

 if(isset($_POST['login'])) {
    require 'connect.php';

    $email = $_POST['email'];
    $password = $_POST['password'];
    $select_userdata = "select * from users where password ='$password' AND email = '$email'";

    $run_check = mysqli_query($dbconfig, $select_userdata);
    $check_user = mysqli_num_rows($run_check);

    /**Error part**/
    if ($check_user == 0) {
        echo "<script>alert('Password or email is incorrect')</script>";
        echo "<script>window.open('login.php','_self')</script>";
    } else {
        $_SESSION['email'] = $email;
        echo "<script>alert ('You Have Been Logged in')</script>";
        header('Location: index.php');
        exit;
    }
}
if(isset($_GET['logout'])) {
    unset($_SESSION['email']);
}
 

По какой-то причине скрипту все равно, есть ли у меня адрес электронной почты и пароль в базе данных или нет. Он «притворяется», что есть такой адрес электронной почты и пароль, и переходит к $ _SESSION[’email’] = $email;

Мой вопрос в том, что я делаю не так, и как мне это исправить?

Комментарии:

1. вы вызывали session_start() на этой странице? если нет, он будет только притворяться, что что-то делает с $ _SESSION

2. да, я вызвал session_start() в начале функции. По какой-то причине я не могу обновить код, но, пожалуйста, поверьте мне на слово. 🙂

3. потому $_SESSION['email'] = $email; что и перенаправление НЕ находятся внутри if ($check_user == 0) {...} , поэтому они всегда происходят после чтения базы данных, несмотря ни на что. Предупреждения Javascript не останавливают процесс, как вызов throw new Exception(""); в C #. Либо вставьте exit() , if ($check_user == 0) { либо вставьте другой материал if ($check_user == 0) {

4. или, скорее, поместите другой материал в else

5. это действительно странно. Я вставил другие данные в else, но теперь он говорит, что адрес электронной почты или пароль неверны. Я изменил код, должно ли это выглядеть так?

Ответ №1:

Проблема в вашей логике, а не в вашем коде. Значение $check_user равно 0 или больше, для вашего кода разницы нет. он всегда достигает строки $ _SESSION [’email’] = $email; . Попробуйте это:

 <?php
session_start();
include'functions/dbconfig.php';

if(isset($_POST['login'])) {
    require 'functions/connect.php';
    $email = $_POST['email'];
    $password = md5($_POST['password']);
    $select_userdata = "select * from users where password ='$password' AND email = '$email'";


    $run_check = mysqli_query($dbconfig, $select_userdata);
    $check_user = mysqli_num_rows($run_check);

    if ($check_user == 0)
    {
        echo "<script>alert('Password or email is incorrect')</script>";
        echo "<script>window.open('login.php','_self')</script>";
    }
    else
    {
        $_SESSION['email'] = $email;
        echo "<script>alert ('You Have Been Logged in')</script>";
        header('Location: index.php');
        exit;
    }
}
if(isset($_GET['logout'])) {
    unset($_SESSION['email']);
}
?>
 

Комментарии:

1. По какой-то причине я все еще получаю сообщение об ошибке, что мой пароль или адрес электронной почты неверны.

2. Ошибки нет, просто указано, что пароль или адрес электронной почты неверны. В основном — check_user == 0. Но адрес электронной почты и пароль на 100% верны. Может быть, это потому, что я сохраняю пароль в базе данных в формате md5?

3. Да, вы должны ввести пароль md5 перед вашим sql.

4. Не могли бы вы показать мне, как это сделать в случае входа в систему? Я только что попробовал $passwordmd5 = md5($password); а затем изменил свой запрос: $select_userdata на выбор passwordmd5, но по-прежнему никаких результатов.

5. Я только что все исправил с вашей помощью. Большое вам спасибо. Могу ли я отредактировать ваш код, чтобы сделать его ответом?