#php #session
#php #сессия
Вопрос:
Я пытаюсь исправить свой скрипт входа в систему, на моем локальном хостинге он работает, но загружен на мой онлайн-тестовый сервер, выход из системы нарушен, я получаю эту ошибку:
Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in htdocs/logout.php on line 17
Warning: Cannot modify header information - headers already sent by (output started at htdocs/logout.php:17) in htdocs/logout.php on line 18
Warning: Cannot modify header information - headers already sent by (output started at htdocs/logout.php:17) in www/htdocs/logout.php on line 34
Не совсем уверен, что могло быть причиной этого, поскольку он работал на моем локальном хостинге, есть идеи?
Комментарии:
1. Не могли бы вы показать код logout.php ?
2. Есть ли какой-либо вывод перед session_destroy? Кроме того, каков уровень отчетности PHP в localhost. Если он настроен на игнорирование предупреждений, то он просто не показывает эти сообщения.
3. Привет, проверьте, отображается ли какой-либо вывод в виде заголовка, и перед выполнением session_destroy вы должны запустить сеанс на php, удачи
Ответ №1:
session_start();
session_destroy(); /*or sesion_unset();*/
Комментарии:
1. Это сработало 🙂 спасибо, есть какая-нибудь причина, по которой это работало бы на моем локальном хостинге даже без
session_start()
?2. возможно, вы использовали error_reporting(0), который заставляет скрыть ошибку или имеет настройку в PHP. INI для автоматического запуска сеанса на всей странице! или включили страницу, с которой вы начали сеанс!
3. Понял, спасибо :), кстати, я видел вашу ссылку на ultra light forums, у вас там опечатка, там написано «можете ответить на тему утера». ** Автор
Ответ №2:
Для работы session_destroy сеанс должен быть запущен с помощью session_start .
Комментарии:
1. Это сработало 🙂 спасибо, есть какая-нибудь причина, по которой это работало бы на моем локальном хостинге даже без
session_start()
???2. Вы также можете использовать конфигурационную директиву session.auto_start
Ответ №3:
Если вам нужно просто удалить сеанс, если он существует (например, в сценарии автоматического выхода / выхода из системы / деструктора), и он может существовать, а может и не существовать, то вы можете использовать session_status для проверки статуса.
Начиная с PHP 5.4.0, вы можете проверить это следующим образом:
if(session_status() == PHP_SESSION_ACTIVE)
{
session_destroy();
}
Это предпочтительнее, чем создавать новый раздел только для того, чтобы уничтожить его позже.
Согласно руководству по PHP, session_status вернет целое число, которое можно сравнить со следующими константами:
Return Values
• PHP_SESSION_DISABLED - Returned if sessions are disabled.
• PHP_SESSION_NONE - Returned if sessions are enabled, but none exists.
• PHP_SESSION_ACTIVE - Returned if sessions are enabled, and one exists.
Это позволяет вам писать лучший, более эффективный и более гибкий код управления сеансом.