Семантика установки файлов cookie и перенаправления без получения ошибки заголовка - PullRequest
2 голосов
/ 13 мая 2010

Я хотел бы сделать следующее в php:

setcookie('name', $value, $Cookie_Expiration,'/');

then some action 

header("location:http://www.example.com")

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

Не могли бы вы, пожалуйста, сообщить мне, что я делаю неправильно, и если есть способ сделать это?

кстати, этот код до того, как будет сделан какой-либо вывод ... часть установки cookie работает нормально сама по себе, как и код перенаправления .... комбинация завершается неудачно

спасибо

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

Cookies отправляются в заголовке, и вы не можете установить заголовки, если какие-либо выходные данные уже отправлены в браузер (то есть, когда вы устанавливаете cookie).

Самое простое решение, имейте в виду, что это немного небрежно, это использовать ob_start() и ob_clean(), например:

ob_start();
setcookie('name', $value, time()+3600);
ob_clean();
header("Location:http://www.example.com");

Обратите внимание на заглавную букву L в заголовке Location, это очень важно.

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

0 голосов
/ 13 мая 2010

Из руководства php:

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

в основном говорит то, что вы уже знаете из своего предупреждения; что setcookie сам отправляет заголовок. Я, вероятно, задаюсь вопросом, почему вы хотите установить cookie на страницу, а затем перенаправить, почему бы просто не перенаправить и не включить данные в URL, а затем забрать их на целевой странице и использовать данные там и / или сохранить их в cookie затем или сохраните данные сеанса, если у вас уже установлен сеанс.

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