PHP: предотвращение заголовков и сессии - PullRequest
1 голос
/ 26 февраля 2011

Я создал свою собственную образовательную среду MVC, чтобы больше узнать о PHP OOP, что у меня, конечно, есть, но на данный момент я оказался в затруднительном положении. Мне нужно использовать сессии на протяжении большей части проекта, но мне также нужно передать файл пользователю на определенной странице.

Когда я вызываю session_start() по умолчанию, прежде чем войти в свой контроллер, я получаю позорное Headers already sent, когда мне нужно передать файл из контроллера в пользователя. Довольно логично.

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

Каким будет подходящий способ избавиться от сеансов, когда мне нужно передать файл?

Ответы [ 4 ]

2 голосов
/ 26 февраля 2011

Начало сеанса относится к начальной загрузке, а не к объекту IMO.

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

2 голосов
/ 26 февраля 2011

Используйте ООП. Ваши контроллеры должны как-то расширять базовый AbstractController. Итак, добавьте виртуальный метод NeedsSession (), который возвращает true по умолчанию. Теперь переопределите этот метод для контроллеров, которым не нужен сеанс. Так чище.

1 голос
/ 26 февраля 2011

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

session_start должен быть вызван перед отправкой любого заголовка на сервер. Не должно быть пробелов в файлах, которые находятся между двумя двойными проверками ваших файлов, если они содержат пробел в начале или в конце

0 голосов
/ 26 февраля 2011

Если все ваши запросы приводят к файлу index.php, именно здесь вы должны начать сеанс (проблема Headers already sent должна исчезнуть)Помните о кодировке UTF-8 в вашем файле (без спецификации)

...