PHP не изменит, что импортировать при входе в систему

#php #authentication #login #logout #server-side-includes

#php #аутентификация #Выход #на стороне сервера -включает

Вопрос:

Когда вы нажимаете войти, должна отображаться кнопка выхода. Нажатие кнопки выхода из системы должно заставить ее снова отобразить параметры входа. В настоящее время он просто продолжает отображаться в окне входа, даже если он создает сеанс и заполняет его нужной информацией на моем сервере.

Я не уверен, почему мой код не работает. У меня это работало, затем внезапно остановилось, и я не уверен, что я изменил. Кроме того, я знаю, что при этом не используется база данных и что я должен ее использовать, но присваивание требует ее не использовать.

Вот index.php:

 <?php

    session_start();
    if(empty($_SESSION['email']))
    {
        include("includes/login.php");
    }
    else 
    {
        include("includes/logout.php");
    }

?>
  

Вот мой login.php:

 <form id="login" method="post" action="index.php">
    <input name="email" type="email" placeholder="Email@rit.edu" required="required">
    <input name="password" type="password" placeholder="Password" required="required">
    <input class="button" name="submit" type="submit" value="Submit">
</form>

<?php
    //if someone tries to log in
    if (isset($_POST['email']) amp;amp; isset($_POST['password']))
    {
        $email=($_POST['email']);
        $password=sha1($_POST['password']);

        $users = file('includes/users.php', FILE_IGNORE_NEW_LINES);

        for($i=0;$i<count($users);$i  )
        {
            $user = explode(',', $users[$i]);
            if($user[0] === $email amp;amp; $user[1] === $password)
            {
                session_start();
                $_SESSION['email']=$user[0];
                $_SESSION['pass']=$user[1];
                $_SESSION['name']="$user[2] $user[3]";
                $_SESSION['admon']=$user[4];
            }
        }
    }   
?>
  

Вот logout.php:

 <form id="login" method="post" action="index.php">
    <input name="logout" type="submit" value="logout" />
</form>

<?php
    if($_POST['logout'] === 'logout')
    {
        session_destroy();
    }
?>
  

Ответ №1:

В вашем index.php вы проверяете, вошел ли пользователь уже в систему:

 if(empty($_SESSION['email']))
  

Если нет, вы включаете страницу входа, в противном случае выход. Но если вы только что отправили свою форму, СЕАНС [’email’] по-прежнему пуст, и вы отображаете свою форму. Но у вас есть ваши регистрационные данные, поэтому, если ваши данные верны, вы войдете в систему — и вы увидите это после обновления.

То же самое верно для вашего выхода из системы — если вы отправите свою форму выхода, ваш сеанс будет активен для одного последнего запроса (который уничтожит его), поэтому страница выхода будет отображаться снова. Вам нужно обновить свой браузер, и появится логин.

Чтобы исправить обе проблемы, просто добавьте перенаправление в конец обоих if-s. Например.:

 if($_POST['logout'] === 'logout')
{
    session_destroy();
    header('Location: index.php);
}
  

Это перезагрузит вашу страницу после обработки выхода из системы, эффективно давая вам хороший результат. Сделайте то же самое с логином, и это тоже будет работать.