#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);
}
Это перезагрузит вашу страницу после обработки выхода из системы, эффективно давая вам хороший результат. Сделайте то же самое с логином, и это тоже будет работать.