Ich hatte eine require("x.inc.php") der Übersicht halber
vor setcookie() geschoben,
und das hat das Cookiesetzen irgendwie zerschossen.
Die x.inc.php erzeugt eine Ausgabe. Entweder außerhalb des PHP-Bereiches (dazu zählen auch Leerzeichen und Zeilenumbrüche vor dem <?php oder nach dem ?> ) oder innerhalb, z.B. mit echo oder print.
setcookie muss wie alle HTTP-Header-modifizierenden Funktionen vor jeglichen Ausgaben aufgerufen werden. Zur Not kann man auch die Ausgaben mit Hilfe der ausgabesteuernden Funktionen abfangen.