PHP не изменит то, что импортировать при входе - PullRequest
0 голосов
/ 09 ноября 2011

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

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

Вот index.php:

<?php

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

?>

Вот мой логин.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']) && 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 && $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 Ответ

1 голос
/ 09 ноября 2011

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

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

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

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

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

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

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

...