Вопрос

У меня есть веб-сайт 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 и посмотрите, работает ли он.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top