Я создал 3 файла.
Первый - это мой файл index.php, в котором хранится весь мой HTML.
// index.php file
<?php
session_start();
?>
<?php
if (!isset($_SESSION['u_id'])) {
header("Location: login.php");
exit();
}
?>
Второй - мой файл входа в систему (часть этого), где я создаю сеансы.
//login.php
$_SESSION['u_id'] = $row['user_id'];
$_SESSION['u_first'] = $row['user_first'];
$_SESSION['u_last'] = $row['user_last'];
$_SESSION['u_email'] = $row['user_email'];
$_SESSION['u_log'] = $row['user_login'];
header("Location: ../index.php?login=success");
exit();
И последний для выхода из системы, когда я пытаюсь уничтожить свои сеансы.
//logout.php
<?php
if (isset($_POST['submit'])) {
session_start();
session_unset();
session_destroy();
header("Location: ../login.php?logout");
exit();
}
Итак, проблема в следующем... как вы можете видеть из кода, я проверяю свой файл index.php, если раздел не установлен, чтобы перенаправить пользователей на login.php. После успешного входа в систему и выхода из системы я пытаюсь посетить домашнюю страницу 'index.php'. Я ожидал, что браузер перенаправит меня на login.php, но этого не произошло, я вижу только белый экран без html-кода, когда я проверяю, есть также никаких ошибок в консоли.
Вы, вероятно, просто нарушаете правило «без вывода перед отправкой заголовков» … вводя ненужные лишние пробелы между ?> и <?php.
Вы говорите, что у вас вообще нет журналов ошибок? Предполагая, что вы начали сеанс правильно, все, что вам нужно сделать, это просто очистить данные сеанса с помощью $_SESSION = []; и убедитесь, что браузер не кэширует страницу.
Вы начинаете сеанс на logout.php?
Возможный дубликат Белый экран смерти PHP
у меня должна быть одна страница, которая включает 3 файла, а затем добавить в нее функцию session_start(). Идентификатор сеанса отличается, потому что logout.php, login.php не имеют session_start()
@MartinM «Это тот, который копируется, совершенно другой, не связанный с установкой или удалением сеанса». Это вполне может быть связано. Вы должны поделиться ошибкой, которую вы получаете.
$_SESSION = array(); для явного сброса массива сеансов. session_destroy() их тоже не удаляет.






Это связано с тем, что вы отображаете некоторый контент до, изменяя заголовок. Тогда заголовок уже был отправлен. и header(something) не будет работать.
// index.php file
<?php
session_start();
?>
<!-- there is a space below. -->
<?php
if (!isset($_SESSION['u_id'])) {
header("Location: login.php");
exit();
}
?>
Измените свой код на
// index.php file
<?php
session_start(); // not closing php tag just below
if (!isset($_SESSION['u_id'])) {
header("Location: login.php");
exit();
}
?>
Когда вы визуализируете страницу, сервер отправляет в браузер HTTP-сообщение.
(из Википедия)
The request/response message consists of the following:
- Request line, such as GET /logo.gif HTTP/1.1 or Status line, such as HTTP/1.1 200 OK,
- Headers
- An empty line
- Optional HTTP message body data
Если вы отправляете некоторые данные тела сообщения (даже пробел) перед использованием header();, заголовок уже будет отправлен. Выполнение header() после этого не будет иметь никакого эффекта, так как HTTP-сообщение уже определено.
Большое спасибо! Вот и все, это работает правильно, я ожидаю прямо сейчас!
Вы понимаете, почему?
Я пытаюсь что-то найти и углубиться в это решение, но ничего не могу найти... новичок в php...
Возможный дубликат stackoverflow.com/questions/1475297/phps-white-screen-of-death