PHP: ob_end_flush () завершить сеанс - PullRequest
0 голосов
/ 22 декабря 2011

Кажется, что ob_end_flush() вызывает неявное закрытие сессии.Это намеренное поведение?Я предполагаю, что ответ «да», но могу ли я как-то предотвратить это?

Вот описание проблемы, с которой я столкнулся.Я использую фреймворк, который использует пользовательский обработчик сессии, я не думаю, что это имеет значение в этом случае, но только для информации.Фактическая проблема возникает, когда в какой-то момент в фреймворке вызывается код ob_end_flush().Регистрируя вызовы пользовательских обработчиков сеансов, я замечаю, что в этом случае вызывается запись и закрытие сеанса.Это настолько неявно, что я даже не могу отладить его с помощью Zend Debugger, только записать его в журнал error_log.Итак, после ob_end_flush() взаимодействие с сеансом все еще продолжалось (я знаю, что это может быть неправильно, но все же это так), и в той ситуации, когда предыдущий сеанс уже закрыт, начинается новый сеанс с новым идентификатором.Новый сеанс имеет новый идентификатор, потому что cookie не установлен в данный момент.Итак, в результате я получил две отдельные сессии с двумя разными идентификаторами.

Лучшим решением для меня, вероятно, было бы отключение этого неявного ob_end_flush() поведения, но я приму любой ответ.

Заранее спасибо.

1 Ответ

0 голосов
/ 22 декабря 2011

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

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