PHP $_SESSION не работает должным образом
Вопрос
У меня есть веб-сайт PHP, который я поддерживаю, и я подтвердил, что в какой-то момент это сработало.
У нас есть веб-сайт, использующий систему входа в систему, которая хранит информацию вошедшего в систему пользователя в $_SESSION['user']
переменная.Сайт, используемый для выхода пользователя из системы при нажатии /logout.php что по существу удалило эту часть сеанса, а затем header()
перенаправлен на домашнюю страницу.
С недавнего времени /logout.php файл с session_start()
вверху почему-то не видит информацию о сеансе, когда print_r()
используется для вывода в целях отладки.
Если я перейду на другую страницу, я отлично увижу информацию о сеансе, но не на странице выхода из системы... именно поэтому я не могу удалить информацию о сеансе, потому что она недоступна.
я думал $_SESSION
был глобальным на сайте до закрытия браузера.У меня такого никогда не случалось, и я знаю, что экземпляр сеанса был запущен на этой странице, поэтому странно, что он не показывает мне данные сеанса.
Есть идеи?Я вообще в тупике от этого!
Код:/logout.php
<?
#session_start() is inside this file
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');
unset($_SESSION['user']);
header("location: /");
exit();
?>
Проверка $_SESSION['user']
распространяется на весь сайт, и я обращаюсь к различным элементам ниже него, когда это необходимо для разных целей.Кто-то другой создал этот сайт, и я пытаюсь понять, почему он вдруг у него не работает.
Решение
Вы получаете доступ к logout.php из такой же точный домен, с которого вы установили сеанс для начала (т. е.example.com против.www.example.com/logout.php)
Что касается простого сброса конкретных данных сеанса, лучше всего было бы вызвать session_destroy()
а затем отключите файлы cookie, чтобы завершить сеанс.
Другие советы
Если домен/субдомен такой же, как и остальная часть страницы, я бы сказал, что это похоже на типичный сеанс по сравнению с обычным сеансом.ошибка вывода.Убедитесь, что вы включили все ошибки и отобразили их, так как вы могли распечатать вывод клиенту перед вызовом. session_start()
.Это нарушит работу функции и сделает сеансы недоступными.
Чтобы устранить проблему (если это так), вам следует удалить весь вывод перед session_start
.Даже пробел перед <?php
будет считаться выводом Apache (и других).Также убедитесь, что вы отключили в документе спецификацию (маркер порядка байтов) (любой приличный редактор позволит вам изменить это, просто найдите что-то вроде «Текущие настройки файла»).
Всегда помните, что первая строка вашего PHP-кода должна быть session_start();
и ничего больше.Если все, что вам нужно сделать, это отключить переменные сеанса и уничтожить сеанс, попробуйте удалить require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');
и добавьте session_start() и session_destroy() в конец файла logout.php и посмотрите, работает ли он.