Вопрос №49535 от пользователя Юрий Бачевский в уроке «Сессия», курс «Веб-разработка на PHP»

Юрий Бачевский

Какая-то мистика! Не могу вывести флеш сообщение в случае если данные не верны. Вот моё ревью https://ru.hexlet.io/code_reviews/341434 Подскажите, пожалуйста, куда копать. Думал что проблема с работой самого флеша, но если вывести сообщение об успешной авторизации, то все работает как и ожидается.

Провел небольшой рефакторинг. И теперь вообще перестали тесты проходить. Но во время отладочной печати видно что все данные сетятся корректно. Только почему-то после редиректа на главнюу, они как буд-то пропадают и ничего не работает.

2 1

Юрий Бачевский

Все заработало! Нашел в чем было ошибка, с помощью ребят в Slack'e. Оказывается это было из-за того что session_destroy() вызывался после маршрута delete. А когда я перенес его внуть маршрута, то все заработало корректно с первого раза!

Но тут у меня вопрос. Почему вызывалась функция session_destroy() которая была вне тела маршрута?

Получается что после того как отработает маршрут и отправить http-ответ. То после этого выполняется весь остальной код в файле, который не находится внутри маршрутов, верно? Если да, то тогда неясно почему это происходит? Ведь мы используем return для возвращения ответа и соответственно прекращаем дальнейшее выполнение кода в файле.

Или я не правильно понимаю данный механизм работы? Прошу помочь разобраться с этим моментом.

0

Роман Ашиков

Приветствую, Юрий!

Рад, что у вас получилось самостоятельно справить с задачей.

Для того, чтобы ответить на вопрос, почему session_destroy() вне обработчика маршрута приводит к уничтожению сессии нужно разобраться как интерпретатор загружает и выполняет код. Это касается всех динамических языков: PHP, JavaScript и т.д.

Вызов функции вне определения приводит к тому, что она выполняется при загрузке файла. Собственно, поэтому сессии и перестают работать. В начале мы делаем session_start() и затем сразу session_destroy(). Есть хорошая статья, в которой как раз освещается эта проблема — https://ru.hexlet.io/blog/posts/skripty-moduli-i-biblioteki

2

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
20 октября 8 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
20 октября 8 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
20 октября 8 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
20 октября 8 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
20 октября 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Новый
Создает веб-приложения со скоростью света
20 октября 5 месяцев