Почему если скрипт не работает, то при выполнении в xdebug всё работает прекрасно?

Я уже всю голову сломал. Наблюдается странная штука. Есть скрипт сайта (писал сам всё без фреймворков), логика примерно такая, при входе на страницу идёт проверка авторизации (есть ли куки или сессия), если юзер авторизован, то в базовом контроллере создаётся объект этого юзера.

На некоторых страницах идёт проверка авторизован ли он и в зависимости от результата редиректит на ту или иную страницу.

Берём пример из общей проблемы:
1) Захожу на страницу авторизации
2) заполняю форму и отправляю её
3) мне устанавливаются куки и в сессию записывается session_id
4) сразу же после авторизации происходит редирект на страницу аккаунта пользователя
5) идёт проверка в контроллере есть ли вообще юзер или он null
6) если null, то редиректим на страницу авторизации и показываем ошибку, иначе показываем страницу с данными юзера.

На деле у меня возникает затык на пункте 4 и 5, то есть сразу после редиректа на страницу аккаунта показывается, что $user = null, и только после обновления страницы появляется $user. Такая же проблема у меня при заходе на страницу авторизации, если я залогинен, контроллер видит, что я залогинен и направляет на страницу аккаунта, а контроллер аккаунта не видит и направляет обратно на страницу логина с ошибкой.

Всё бы ничего, решил через xdebug прогнать, посмотреть, где ошибка у меня, а он мне показал фигу и скрипт весь прошёл идеально, то есть всё выполнилось, как и должно было...

Прошу прощение за сумбурность вопроса, по правде не сильно понимаю, как в именно такой ситуации спрашивать. Код в пример приводить не вижу смысла, его уже очень много, а что бы какую-то одну часть показать, то я не знаю какую. Но проблема есть, я даже примерно не представляю из-за чего и как такое может быть и почему с дебаггером срабатывает. Может есть у кого идеи?
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
@ntzch Автор вопроса
Нашёл я в чём проблема. Если вдруг у кого-то будет нечто подобное, то у меня случилось следующее:

Каждый раз, когда я загружаю страницу, скрипт проверяет залогинен я или нет, по кукам и сессии. В коде сильно завязано на то, что смотрит у меня сессию и делает запрос к базе на обновление времени последнего моего посещения в таблице sessions, если после запроса вернулось ноль затронутых строк, то сессия в скрипте обнуляется.
У меня получилось так, что после авторизации, когда идёт редирект на другую страницу (а это уже два запроса страницы), второй запрос происходит в течении той же секунды, что и первый, следовательно обновление времени последней активности не происходит и скрипт меня посылает. А вот с дебаггером всё происходит с задержкой, потому там такой проблемы и не было.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы