2013-06-25 5 views
-1

Итак, я работаю над этой системой входа и, конечно, когда пользователь входит в систему, я восстанавливаю идентификатор сеанса. Но после того, как я восстановил свой идентификатор сеанса, я также хочу установить токен, который будет храниться в файле cookie. Однако, похоже, я не могу это сделать на той же странице. Я получаю сообщение об ошибке, которая говорит:session_regenerate_id и setcookie на той же странице в PHP

Предупреждение: session_regenerate_id() [function.session-Возрожденный-идентификатор]: Не удается регенерировать идентификатор сессии - заголовки уже прислал в /htdocs/somesite/test.php на линии 44

Предупреждение: не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в //htdocs/somesite/test.php:76) в /htdocs/somesite/test.php по линии 54

Это то, что я прямо сейчас:

session_regenerate_id();
setcookie("Foo","Bar", time()+$CookieExpireTime,"/");

Мне интересно, есть ли работа вокруг этого. Он работает, когда я тестирую его на локальном хосте, но не на сервере ...

+0

спасибо, ребята, действительно был некоторый выход, следующий перед session_regenerate_id, и я просто пропустил его ... –

ответ

0

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

Другие причины: Синтаксические ошибки В приведенном выше примере вы увидите вывод, начатый в /....includes/something/something/something.php:12. Включение/something/something/something.php - это имя файла, о котором вам нужно беспокоиться. Значение: 12 означает, что проблема, которую вы должны исправить, находится в строке 12. В этом же примере сообщение «in /includes/something_else.php on line 67» может быть полностью проигнорировано. Это не проблема. Именно тот обнаружил, что проблема уже возникла.

Если ошибка «заголовки уже отправлены» появляется ПОСЛЕ любой другой ошибки, то вам необходимо исправить эту ошибку FIRST. (Само сообщение об ошибке - это то, что вызвало отправку заголовков, поэтому исправление этой ошибки приведет к тому, что вторая ошибка тоже исчезнет.)

Если «началось с» относится к строке 1, то это либо пробел перед открытие <?php тега или неправильная кодировка в файле. Помните, что если ваш язык находится в UTF8, вы ДОЛЖНЫ кодировать файл как «UTF8-без-спецификации», иначе спецификация (символ байта-байта, невидимый символ в начале файла) приведет к тому же заголовку - уже отправленная ошибка.

Резюме:

а) ищет, где это началось в '

б) отслеживать номер строки

с) проверить, что обычно происходит на этой линии.

  • Если это конец файла, то это пробелы.
  • Если это начальный файл, это скорее всего пробелы или некорректная кодировка.
  • В другом месте это может быть синтаксическая ошибка или результат оператора «echo()», который отображает информацию или, возможно, код отладки.
  • Общие ошибки синтаксиса включают использование внутренних кавычек внутри операторов, которые уже имеют одинарные кавычки. Убедитесь, что ваши котировки не совпадают. Если вам нужно использовать одиночные кавычки, в то время как внутри других одиночных кавычек, измените ваш на «вместо просто».

d) остальная часть информации просто показывает другую информацию о выполнении, в основном часть кода, которая обнаружила, что она не может действовать должным образом из-за проблемы, которая произошла в местоположении «началось с».

Источник: zen-cart.com

Другой подобный поток на SO: How to fix "Headers already sent" error in PHP

Я надеюсь, что это помогает.

0

Проблема не в двух функциях, проблема в том, что вы не можете позвонить session_regenerate_id() после того, как любой вывод был отправлен на страницу , Эта функция, например header(), должна быть вызвана до того, как любой вид вывода будет отправлен на страницу.

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