Cookies в PHP, как?
Из-за буферизации данные не отправлялись до установки cookie. А теперь данных больше, PHP отправляет их до момента выполнения setcookie.

Кто не верит, что такое возможно, выполните скрипт:
Hello world!

<?php setcookie('test', 'test') ?>
У меня этот код работает, cookie устанавливаются (никаких notice).

Теперь такой вариант:
<?php for ($i = 1; $i < 500; ++$i) echo 'Hello world!
'; ?>

<?php setcookie('test', 'test') ?>

Получаю:
Warning: Cannot modify header information - headers already sent

В любом случае, все заголовки должны быть отправлены до данных, и надеяться на стандартный буфер нельзя. Используйте ob_start.
Куки передаются в заголовках, это стандарт HTTP. Если вы начали вывод, то заголовки уже ушли, а повторно их(заголовки) не послать. Вот ваша проблема. Начните вывод данных после работы PHP.