quando usi le sessioni o i cookie o la funzione header per impostare gli header l'output non deve essere partito.
o strutturi il codice in modo da evitare output prima di impostare nuovi header (esplicitamente o implicitamente) oppure aggiungi ob_start(); all'inizio dei tuoi script
con ob_start(); tutto l'output sarà bufferizzato e inviato solo alla fine dello script o quando vuoi utilizzando le altre funzioni del gruppo ob_xxx
ciao