header e session funzionano perfettamente in locale ma creano problemi in remoto

Fabrizio Fiorita

Utente Attivo
Buongiorno.
Ho creato un insieme di pagine PHP per consentire l'accesso a determinati Utenti - preselezionati e registrati in una tabella di DB - ai dati registrati sul DB stesso.
La struttura di accesso è così progettata:
1. Nella pagina_a.html è contenuto un form con due voci: username e password. Al SUBMIT si viene rinviati alla pagina_b.php
2. La pagina_b.php effettua controlli di compatibilità e sanitarizzazione dell'input, poi verifica che username e password corrispondano nella tabella del DB. In caso di errore si viene rinviati alla pagina_a.html mediante funzione header. Se invece tutto è OK vengono scaricate dal DB le autorizzazioni previste per quell'utente, viene creato un oggetto utente, viene aperta una sessione, alla variabile di sessione viene assegnato l'oggetto utente ed il controllo viene trasferito alla pagina_c.php mediante funzione header
3. La pagina_c.php visualizza un menu di accesso alle diverse funzioni consentite, con voci-menu differenziate a seconda del livello di autorizzazione consentito per quell'utente.

Il tutto in locale (Win XP o Win7, Apache 2.4, PHP 5.4.4, testato con 5 browsers diversi) funziona perfettamente.
Trasferendo il tutto in remoto (Linux, Apache 2, PHP 5.3.9), la funzione header viene del tutto ignorata: non dà alcun errore, nell'HTML della pagina il tag <body> è rigorosamente vuoto; se inserisco dell'output dopo la funzione header questo viene regolarmente visualizzato, come se la funzione header fosse assolutamente trasparente o inesistente.
Escludo errori di sintassi o di logica, visto che la funzione in locale fa regolarmente il suo dovere.

Ho verificato con phpinfo i settaggi di php.ini, che mi sembrano assolutamente identici fra di loro, a meno ovviamente delle nuove voci introdotte da 5.4.4 rispetto a 5.3.9, che però non dovrebbero avere alcuna attinenza con il problema.

Per risolvere almeno temporaneamente il problema ho commentato le istruzioni header ed ho introdotto due pulsanti - uno per il caso di errore che mi rimanda indietro ed uno per il caso di OK che mi manda avanti - e qui si è presentato un secondo, incomprensibile problema.
Il tutto in locale funziona a quel dio biondo, ma in remoto succede una cosa stranissima: quando dalla pagina_b.php passo alla pagina_c.php, all'apertura della sessione non viene riesumata la sessione già aperta ma ne viene aperta una nuova con un UID diverso.

Escludo anche qui errori di sintassi o di logica, visto che la sessione in locale fa regolarmente il suo dovere.

Ho ipotizzato una possibile mancata registrazione del cookie di sessione, ma l'ipotesi è piuttosto remota, visto che tutti i miei browsers accettano i cookies e il path dei cookies è rimasto quello "Master Value".

Qualcuno ha avuto i miei stessi problemi? Forse mi è sfuggito qualche settaggio del php.ini? Io ho soltanto inserito (in ogni pagina e prima di session_name e session_start), sia in remoto sia in locale, il session.save_path ed ho verificato che viene utilizzato correttamente, ma quando passo alla seconda pagina della sessione, in quella cartella ci trovo l'UID della sessione di partenza, con tutti i dati che ci ho messo, ed un nuovo UID vuoto.

Grazie a chi mi potrà aiiutare.
Fabrizio
 
Imposta il livello di reporting degli errori a E_ALL sia in locale che in remoto (ovviamente solo a scopo di testing):
PHP:
error_reporting(E_ALL);
Assicurati di inserirlo all'inizio di ogni script (oppure cambia il valore in php.ini). Vedi degli errori?
 
Al momento i codici sono puntati alla risoluzione del problema SESSION, visto che il problema HEADER è aggirabile, pur con una soluzione che esteticamente non mi piace. Quindi le righe che riguardano lo HEADER sono commentate e sono invece attive le righe con i forms alternativi.

La prima pagina è una pagina Joomla!, non ha contenuti PHP e si risolve nel solo FORM di accesso, quindi è inutile che la pubblichi.

Pagina di verifica dell'accesso (verifica_accesso_direzionale.php):
PHP:
<!DOCTYPE html>
<html lang="it">
  <head>
    <meta charset="utf-8">
    <meta name="generator" content="CoffeeCup HTML Editor (www.coffeecup.com)">
    <meta name="created" content="mar, 03 lug 2012 15.02.57 GMT">
    <meta name="description" content="">
    <meta name="keywords" content="">
	<link rel="stylesheet" href="/templates/ff_sipbc_j11/css/sipbcall.css" type="text/css" media="all" />
    <title>Verifica accesso direzionale</title>
	<!-- Verifica se chi ha chiesto l'accesso direzionale è abilitato (dati provenienti da pagina Joomla) -->
    <!--[if IE]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<script type="text/javascript" src="../templates/ff_sipbc_j11/js/5shiv.js"></script>
    <![endif]-->
  </head>
<body>
<?php
error_reporting(E_ALL);
  require_once('costanti.inc');
  require_once('dbconnect.inc');
  require_once('userinfo.inc');
  $codice = $_POST["codice"];
  $password = $_POST["pw"];
  $conn = @new mysqli($db_server, $db_user_name, $db_password, $db_name);
  if (mysqli_connect_errno() != 0)
	{
	  $errno = mysqli_connect_errno();
	  $errmsg = mysqli_connect_error();
      echo '<article id="modiscriz1">', TESTATA;
	  echo 'Errore connessione: ', ($errno),' ',$message, '<input type="button" value="Torna indietro" onClick="javascript:history.go(-1)" />';
      exit;
	}
	$conn->query("SET NAMES 'utf8'");
	$query_str = "SELECT * FROM accesso WHERE codice='$codice'";
  	$result = $conn->query($query_str);
  	if ($result === FALSE)
  	   {
    	$errno = $conn->errno;
    	$errmsg = $conn->error;
        echo '<article id="modiscriz1">', TESTATA;
    	echo 'Errore dati: ($errno) $errmsg<br/>','<input type="button" value="Torna indietro" onClick="javascript:history.go(-1)" />';
    	$conn->close();
		exit;
	   }
	 $row_data = @$result->fetch_array();
	 $sha2=hash('sha256', $password);
	 if ($sha2 != $row_data['password'])
	 	{
        echo '<article id="modiscriz1">', TESTATA;
		 echo '<span style="color:red; font-weight:bold;">Codice e/o password non validi</span><br />';
		 echo '<input type="button" value="Torna indietro" onClick="javascript:history.go(-1)" />';
		 $result->close();
		 $conn->close();
		 exit;
		}
  	 ini_set('session.save_path', '../iscrizione/tmp/');
  	 session_name('ACCESSODIREZIONALE');
  	 session_start();
	 $tipo = $row_data['tipo'];
	 $sezione = $row_data['sezione'];
	 $delegazione = $row_data['delegazione'];
	 $user = new UserInfo($codice, $password, $tipo, $sezione, $delegazione);
	 $_SESSION['current_user'] = $user;
	 if (isset($result)): $result->close(); endif;
	 if (isset($conn)): $conn->close(); endif;
// header('location:accesso_direzionale.php');
// exit;
	 echo '<br /><h3>Credenziali corrette per ';
	 switch ($tipo) 
	    { 
	 		case "1": echo "l'Amministratore del Sistema e la Segreteria Nazionale</h3>"; break;
			case "2": echo 'il Presidente ed il  Segretario Generale</h3>'; break;
			case "3": echo 'la ', $sezione, '</h3>'; break;
			case "4": echo 'la ', $delegazione, '</h3>'; break;
		}
	 echo '<form method="post" name="avvio" action="accesso_direzionale.php">',
	 	  '<button type="submit" />Accedi</button>',
	      '</form>';
//  	 exit;
?>
</article>
</body>
</html>

Pagina di accesso (accesso_direzionale.php)
PHP:
<!DOCTYPE html>
<?php
error_reporting(E_ALL);
  require_once('costanti.inc');
  require_once('dbconnect.inc');
  require_once('userinfo.inc');
  ini_set('session.save_path', '../iscrizione/tmp/');
  session_name('ACCESSODIREZIONALE');
  session_start();
?>
<html lang="it">
  <head>
    <meta charset="utf-8">
    <meta name="generator" content="CoffeeCup HTML Editor (www.coffeecup.com)">
    <meta name="created" content="mar, 03 lug 2012 15.02.57 GMT">
    <meta name="description" content="">
    <meta name="keywords" content="">
	<link rel="stylesheet" href="/templates/ff_sipbc_j11/css/sipbcall.css" type="text/css" media="all" />
    <title>Accesso direzionale</title>
	<!-- Riceve OK da verifica_accesso.php e seleziona il tipo di autorizzazione per l'utente -->
    <!--[if IE]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<script type="text/javascript" src="../templates/ff_sipbc_j11/js/5shiv.js"></script>
    <![endif]-->
  </head>
<body>
<?php
  print_r(session_id()); // togliere dopo debug
  print_r(session_name()); // togliere dopo debug
  $user = $_SESSION['current_user'];
  $codice = $user->get_codice();
  $tipo = $user->get_tipo();
  $pwu = $user->get_pwu();
  $sezione = $user->get_sezione();
  $delegazione = $user->get_delegazione();
  $errore = FALSE;
  echo '<article id="modiscriz1">';
  echo TESTATA;
  switch ($tipo)
   {
	case "1":
?>
		  	<table style="width:1000px; border:black 5px ridge; color:blue; margin:auto; text-align:center;">
			  <tr style="font-weight:bold; text-align:center;">
			  	  <td colspan="5"><p>Accesso consentito con privilegi dell'Amministratore di sistema.</p></td>
				  </tr>
			  <tr>
	 	  	   <td><form method="post" name="avvio" action="../phpmyadmin" target="_blank">
	 		   		 <button type="submit" />Database</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="abilita.php">
	 		   		 <button type="submit" />Abilita accesso</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_abilitati.php">
	 		   		 <button type="submit" />Elenco abilitati</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_iscrizioni.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Iscr. individuali</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_iscrizioni_collettive.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Iscr. collettive</button>
			   </form></td>
			  </tr>
			  <tr>
	 	  	   <td><form method="post" name="avvio" action="nuovo_onore.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Ins. Membri On.</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_onore.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Membri d'Onore</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_soci.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Soci individuali</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_collettivi.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Soci collettivi</button>
			   </form></td>
<?php
    break;
	case "2":
?>
		  	 <table style="width:1000px; border:black 5px ridge; color:blue; margin:auto; text-align:center;">
			  <tr style="font-weight:bold; text-align:center;">
			  	  <td colspan="3"><p>Accesso consentito con privilegi della Direzione Nazionale.</p></td>
				  </tr>
				  <tr>
	 	  	   <td><form method="post" name="avvio" action="lista_iscrizioni.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Iscr. individuali</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_iscrizioni_collettive.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Iscr. collettive</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_onore.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Membri d'Onore</button>
			   </form></td>
			   </tr>
			   <tr>
	 	  	   <td><form method="post" name="avvio" action="lista_soci.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Soci individuali</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_collettivi.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Soci collettivi</button>
			   </form></td>
<?php
    break;
	case "3":
?>
		  	 <table style="width:1000px; border:black 5px ridge; color:blue; margin:auto; text-align:center;">
			  <tr style="font-weight:bold; text-align:center;">
			  	  <td colspan="5"><p>Accesso consentito con privilegi della <?php echo $sezione; ?>.</p></td>
				  </tr>
				  <tr>
	 	  	   <td><form method="post" name="avvio" action="lista_iscrizioni.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
		  			 <input type="hidden" name="sezione" value="<?php echo $sezione; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Iscr. individuali</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_iscrizioni_collettive.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
		  			 <input type="hidden" name="sezione" value="<?php echo $sezione; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Iscr. collettive</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_soci.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
		  			 <input type="hidden" name="sezione" value="<?php echo $sezione; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Soci individuali</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_collettivi.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
		  			 <input type="hidden" name="sezione" value="<?php echo $sezione; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Soci collettivi</button>
			   </form></td>
<?php
    break;
	case "4":
?>
		  	 <table style="width:1000px; border:black 5px ridge; color:blue; margin:auto; text-align:center;">
			  <tr style="font-weight:bold; text-align:center;">
			  	  <td colspan="5"><p>Accesso consentito con privilegi della <?php echo $delegazione; ?>.</p></td>
				  </tr>
				  <tr>
	 	  	   <td><form method="post" name="avvio" action="lista_iscrizioni.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
		  			 <input type="hidden" name="delegazione" value="<?php echo $delegazione; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Iscr. individuali</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_iscrizioni_collettive.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
		  			 <input type="hidden" name="delegazione" value="<?php echo $delegazione; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Iscr. collettive</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_soci.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
		  			 <input type="hidden" name="delegazione" value="<?php echo $delegazione; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Soci individuali</button>
			   </form></td>
	 	  	   <td><form method="post" name="avvio" action="lista_collettivi.php">
		  			 <input type="hidden" name="tipo" value="<?php echo $tipo; ?>" hidden="TRUE" />
		  			 <input type="hidden" name="delegazione" value="<?php echo $delegazione; ?>" hidden="TRUE" />
	 		   		 <button type="submit" />Soci collettivi</button>
			   </form></td>
<?php
    break;
   }
?>  
			   <td>
	   		   <form method="post" name="avvio" action="../index.php?option=com_content&view=article&id=719&Itemid=898&lang=it">
	   	 			 <button type="submit" />Cambio accesso</button>
	   		   </form></td>
	  </tr>
  </table>
  </article>
  </body>
</html>

Credo comunque che non troverai nulla nel codice: a parer mio il problema dovrebbe stare nel settaggio di php.ini sul server remoto, qualcosa che mi sfugge o che non so.
 
Probabilmente ho trovato il problema: la chiamata a session_start() deve essere posizionata prima di qualunque altro output (prima del doctype, nel tuo caso), perché imposta un cookie e dunque invia un header. Più in generale, qualunque header deve essere inviato prima dell'output, in quanto in una normale risposta HTTP gli header vengono prima del contenuto.
 
Grazie del tuo interessamento.
A parte il fatto che dubito di poter mettere qualcosa prima del DOCTYPE, questo non spiega perché il tutto funzioni perfettamente in locale: se sono violate le condizioni dello header lo dovrebbero essere sempre e dovunque, non credi?
Ci provo, ma permettimi di dubitare della riuscita.
Hai trovato qualcosa sul php.ini?
 
Sembra che il problema SESSION sia risolto, ma se dovessi dire dov'era l'inghippo proprio non lo saprei dire con esattezza.
Credo - ma non ne ho le prove - che dipenda dalla sequenza con la quale sono scritte determinati codici: mettendo il recupero della variabile $_SESSION subito dopo il session_start ha funzionato.
E' possibile che PHP 5.3.9 (il server remoto) pretenda le cose in un certo ordine e che invece il successivo PHP 5.4.4 (il server locale) le accetti comunque.

Adesso mi tocca occuparmi della funzione HEADER, per la quale non ho nessun indizio.
 
ciao
a che ne so io la header dovrebbe venire prima di qualsiasi output html, salvo ridirigere il flusso, e nella direzionale.php prima c'è diverso html
 
ciao
a che ne so io la header dovrebbe venire prima di qualsiasi output html, salvo ridirigere il flusso, e nella direzionale.php prima c'è diverso html

Tutto l'output che sta prima dello header è soggetto a delle if, lo header viene raggiunto solo se tutte le if sono negative, se viene stampato qualcos'altro vuol dire che i dati del form non sono stati accettati e quindi la pagina non raggiunge lo header.
Il manuale di Wandschneider ritiene che anche gli include e require bloccano header, quindi ho provato a mettere tutta la pagina fra ob_start e ob_end_flush, ma senza successo.
Adesso provo un altro suggerimento, cioè la ricostruzione dell'indirizzo assoluto della pagina mediante HTTP_HOST e PHP_SELF.
A mio parere il problema non sta nel codice, ma, come già visto per SESSION, nella versione PHP del mio server remoto, che ha certe pretese (peraltro ignote) poi eliminate con le versioni successive come quella del mio server locale.
 
ciao
ma, sempre a che ne so e posso sbagliare, anche <!DOCTYPE html>...<body> è un output html e da quello che vedo viene sempre "outputtato" indipendentemente dagli if prima dell'header.
sarà che ho in locale un php vecchiotto (5.2.3) quindi non so se la nuova ver lo permette, ma nel mio caso se metto prima il doct mi da errore (heder cannot...), il tutto salvo mettere prima di tutto l'ob_start e all'ultima riga l'ob_end_flush

p.s.
non dirlo a nessuno ma siamo, penso, coetanei
 
Ho fatto alcune riflessioni ed alcune prove.
Inserendo dei markers nel codice PHP ho constatao che tutto il codice prima della funzione HEADER viene regolarmente interpretato.
Così com'è lo script si blocca in corrispondenza di HEADER, tant'è vero che lo HTML risultante finisce con un tag BODY aperto e dopo non c'è più nulla.
Considerazioni:
1. Se il problema fosse quello della presenza di output prima dello header il blocco si dovrebbe verificare anche in locale, cosa che non avviene.
Ammettiamo per assurdo che l'interprete PHP 5.4.4 sia più "tollerante" del 5.3.9 nell'accettare dello output prima di HEADER (ma solo per assurdo).
2. Anziché bloccarsi, l'interprete mi dovrebbe sganciare un poderoso errore di doppio header, cosa che invece non avviene;
3. Inserendo ob_flush l'errore dovrebbe essere eliminato e la funzione dovrebbe ... funzionare (!).
Ne ho dedotto che l'errore non può essere individuato nella presenza di output prima di HEADER.

Altra ipotesi: errore nell'indirizzo.
1. Ho provato l'indirizzo relativo, ma non funziona.
2. Ho provato l'indirizzo assoluto, ma non funziona.
3. Se l'indirizzo venisse esaminato dall'interprete e non trovato, il risultato sarebbe un rinvio alla pagina iniziale del sito e non un blocco del sistema.
Ne ho dedotto che l'interprete non arriva a prendere in considerazione l'indirizzo ma si ferma prima, e cioè alla parola HEADER!!!

Deduzione finale: devo andare a controllare voce per voce phpinfo per vedere se mi è sfuggito qualche settaggio differente fra 5.4.4 e 5.3.9, sperando che sia un'impostazione modificabile via ini_set o al limite via apache in .htaccess.

Se qualcuno ha da darmi qualche informazione più precisa gli sarei particolarmente grato.
Fabrizio
 
ciao
ma, sempre a che ne so e posso sbagliare, anche <!DOCTYPE html>...<body> è un output html e da quello che vedo viene sempre "outputtato" indipendentemente dagli if prima dell'header.
sarà che ho in locale un php vecchiotto (5.2.3) quindi non so se la nuova ver lo permette, ma nel mio caso se metto prima il doct mi da errore (heder cannot...), il tutto salvo mettere prima di tutto l'ob_start e all'ultima riga l'ob_end_flush

p.s.
non dirlo a nessuno ma siamo, penso, coetanei

Il fatto è che a te dà errore, a me no!!! e in locale funziona.

p.s.
Coetanei? La classe di ferro? :hammer:
 
ciao
visto che, se non capito male, rimandi alla stessa pagina perchè non provi con:
PHP:
//.....
header( "refresh:0; url=accesso_direzionale.php" );
exit();
//.......
può essere una ca...ta, non sarebbe la mia prima, ma talvolta quando l'errore è imperscrutabile un cambiamneto può funzionare (misteri della programmazione)

p.s.
dato che, dalla tua presentazione, ci sono 0.2 probabilità che la tua classe sia un particolare anno compreso tra il 1940 e il 1949, analogo per me,
la probabilità che si sia della stessa classe (di ferro? ormai...) è 0.04
 
Avevo pensato anche io a usare il refresh, e lo proverò sicuramente, ma ho tre buoni motivi per non farlo se non vi sono costretto:
1. Il server che mi impedisce di fare quello che voglio io deve ancora nascere;
2. Il reindirizzamento via refresh può essere disattivato nel browser;
3. Non è una soluzione elegante.

p.s. Nel mio profilo la mia data di nascita è in chiaro. Quindi la probabilità sale.
 
ciao
provando con refresh penso che tu possa capire (se funziona) che l'errore sta in location.

p.s.
mi batti di 4

ps al ps
exit non dovrebbe essere exit() ?
 
Ho provato
PHP:
header( "refresh:0; url=accesso_direzionale.php" );
che non ha prodotto alcun risultato in remoto, dandomi la conferma che è proprio la funzione HEADER che non viene riconosciuta ed eseguita.
Ho provato anche
PHP:
echo '<meta http-equiv="refresh" content="0" url="accesso_direzionale.php">';
che mi introduce un grave errore, cancellando i dati di $_POST.
Il mistero resta.
exit funziona sia con le parentesi sia senza.

p.s. Postbellico!:p
 
La faccenda si fa sempre più complicata.
Ho provato ad inserire questa riga:
PHP:
echo "<script>javascript:window.location.href='accesso_direzionale.php'</script>";
Funziona perfettamente in locale, ma viene assolutamente ignorata in remoto.
Quindi, visto che sia PHP sia Javascript falliscono, devo dedurre che in qualche maniera il php.ini del server remoto impedisca il redirect.
Adesso vado alla ricerca con phpinfo.
 
ciao
penso che tu c'abbia gia pensato, comunque te lo dico lo stesso.
per come suol dirsi "tagliare la testa al toro" perche non fai un file php come_ti_pare.php con solo l'istruzione
<?php
header("location: dove_ti_pare.php");
?>
lo carichi in remoto e lo lanci
se
funzia: il php in remoto supporti header, l'errore si annida nello script
non funzia: php remoto (assurdo) non suppora header (contattare il provider)

analoga, se ti serve, con la sessione
 

Discussioni simili