PHP $ _SESSION не работает должным образом - PullRequest
1 голос
/ 02 марта 2010

У меня есть сайт 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'] выполняется по всему сайту, и я призываю к различным пунктам ниже, когда это необходимо для разных вещей. Кто-то еще создал этот сайт, и я пытаюсь отладить, почему он не работает для них внезапно.

Ответы [ 3 ]

3 голосов
/ 11 марта 2010

Если домен / поддомен такой же, как и остальная часть страницы, я бы сказал, что это похоже на типичную сессию против ошибки вывода. Убедитесь, что вы включили все ошибки, и выведите их на экран, как вы могли бы распечатать на клиенте перед вызовом session_start(). Это нарушит функцию и сделает сеансы недоступными.

Чтобы устранить проблему (если это так), вы должны удалить все выходные данные до session_start. Даже пробел перед <?php будет считаться выводимым Apache (и другим). Также убедитесь, что вы отключили BOM (Byte Order Mark) в документе (любой приличный редактор позволит вам изменить это, просто посмотрите что-то вроде «Текущие настройки файла»).

2 голосов
/ 16 марта 2010

Всегда помните, что первая строка вашего PHP-кода должна быть session_start(); и ничего больше. Если все, что вы собираетесь сделать, это сбросить переменные сеанса и уничтожить сеанс, попробуйте удалить require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php'); и добавить session_start () и session_destroy () в конец файла logout.php и посмотреть, работает ли он.

0 голосов
/ 02 марта 2010

Вы обращаетесь к logout.php из того же точного домена, с которого вы начинаете сеанс (например, example.com против www.example.com/logout.php)

Что касается просто сброса определенных данных сеанса, лучше всего позвонить session_destroy() и затем сбросить куки, чтобы завершить сеанс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...