ho un pagina dinamica così schematizzata:

Codice PHP:
if (!sessionsession start;


/*
inizio include di un file. diverse di queste pagine possono 
produrre messaggi d'errore che vengono raccolti nella session
*/
include(file) { 

  if (
form submit) {
    
//codice della pagina...
    
if (errorisession['msg'] .= "messaggio d'errore";
    
header (questa pagina); 

    
/*
    voglio prevenire l'esecuzione del codice sottostante
    se ci sono stati errori nella prima parte.


    ...altro codice...
    */
    
if(tutto ok) {
      
session['msg'] .= "tutto ok";
      
header(questa pagina ma con include differente);
    }
  }
// fine include

if (session['msg']!==""){
  echo 
session['msg'];
  
session['msg']="";

stranamente l'echo alla fine della pagina non mostra nulla e session['msg'] risulta vuota. accade lo stesso utilizzando un cookie.
se però commento gli header risolvo il problema. ma che succede? perchè quella session o il cookie non vengono conservati dopo il reload? la session di autenticazione con il nome utente viene gestita correttamente.