Проблемы с сессией PHP - PullRequest
       9

Проблемы с сессией PHP

6 голосов
/ 30 августа 2009

Я использую следующий код для аннулирования сеанса. Я ссылался на logout.php на многих страницах. Если щелкнуть эту ссылку выхода, вызывается страница logout.php. Ниже приведен код в logout.php.

unset($_SESSION['admin']);
session_destroy();
header('Location: index.php');

После того, как сеанс признан недействительным, я хочу открыть страницу index.php. Но я получаю следующую ошибку:

Предупреждение: session_destroy () [function.session-destroy]: Попытка уничтожить неинициализированный сеанс в C: \ xampp \ htdocs \ Selection \ logout.php в строке 3

Предупреждение: невозможно изменить информацию заголовка - заголовки, уже отправленные (вывод начался с C: \ xampp \ htdocs \ Selection \ logout.php: 3) в C: \ xampp \ htdocs \ Selection \ logout.php в строке 4

Что не так?

Ответы [ 5 ]

16 голосов
/ 30 августа 2009

Я думаю, что вы не могли вызвать функцию session_start() до уничтожения сеанса.

8 голосов
/ 30 августа 2009

Вам нужно вызвать session_start () в верхней части страницы, чтобы напомнить php, что этот вызов страницы принадлежит сеансу. - По крайней мере, руководство по PHP говорит об этом.

Примечания на этой странице руководства дают подсказку, что session_unset () должен использоваться только в более старых средах, в которых не используется переменная $ _SESSION.

2 голосов
/ 30 августа 2009

Сначала вы должны открыть сессию:

header('Location: index.php');
session_start();
session_unset();
session_destroy();
1 голос
/ 30 августа 2009

Проблема в том, что вы не можете уничтожить сеанс, который не был запущен. Это тогда вызывает предупреждение, которое отображается в браузере. Следующая проблема заключается в том, что вы не можете отправлять заголовки после того, как они были выведены в браузер, поэтому возникает другое предупреждение.

Вам просто нужно проверить, существует ли сеанс первым:

if (session_name() != '') {
    session_destroy();
}
0 голосов
/ 30 августа 2009

Вы должны ВСЕГДА использовать session_start (); ДО использования функции / переменной сеанса. Итак, запустите все файлы PHP с помощью session_start () ;. Также logout.php:

session_start();
session_destroy();
header('Location: index.php');

Вам также не нужно сбрасывать его.

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