Problema AUTH

  • Creatore Discussione Creatore Discussione ghennet
  • Data di inizio Data di inizio

ghennet

Nuovo Utente
13 Giu 2005
2
0
0
Buongiorno a tutti, ho un piccolo problema con la gestione delle autenticazioni in php.

Ho uno script (lo allego alla fine del topic), che controlla gli accessi. Se non loggato mostra la maschera per il login e se tutto è OK rende disponibili il link per il DB altrimenti nega l'accesso alle pagine che includono questo file.

Il problema è questo... su win e apache funziona agreggiamente invece in produzione su Fedora non funziona bene. L'errore è che se un utente per sbaglio inserisce dei dati errati non può più accedere a quella pagina. deve obbligatoriamente cancellare i temporanei di ie per ritentare l'accesso...

Trovate qualcosa di sbagliato ?? Suggerimenti ??

PHP:
require "dbutil.php";
require "debug.php";

// DumpArrayOfVars($_SERVER, 'svr');

  function authenticate() {
    header('WWW-Authenticate: Basic realm="Prova del Sistema di Autenticazione"');
    header('HTTP/1.0 401 Unauthorized');
    echo "<br>Per poter accedere a questa risorsa occorre inserire una coppia login e password valide\n";
    exit;
  }
	
	session_cache_limiter('private'); 
  session_start(); 
  header("Cache-control: must-revalidate");
	session_register("SESSION_DATA"); 
	
	$DSN = "DRIVER=iSeries Access ODBC Driver;SYSTEM=192.168.X.XXX;DBQ=XXXX";
	$DB = odbc_pconnect($DSN,"UID","PWD") or die ("iSeries connessione Falita");
 
  // if (!isset($_SERVER['PHP_AUTH_USER']) || ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
  if ( (!isset($_SERVER['PHP_AUTH_USER'])) ) {
   authenticate();
  } else {	
  	
		$SQL =<<<EOT
			SELECT NOME, COGNOME, LIVELLO, FILIALE, AGENTE FROM WEB_USERS
			WHERE UID='$_SERVER[PHP_AUTH_USER]' AND PWD='$_SERVER[PHP_AUTH_PW]'
EOT;
		$R = odbc_exec($DB, $SQL);
		
		// ShowTable($R, 'top');
		if (odbc_fetch_row($R)) {
			$SESSION_DATA["uid"] 			= $_SERVER[PHP_AUTH_USER];
			$SESSION_DATA["nome"] 		= odbc_result($R, 1);
			$SESSION_DATA["cognome"] 	= odbc_result($R, 2);
			$SESSION_DATA["level"] 		= odbc_result($R, 3); 
			$SESSION_DATA["filiale"] 	= odbc_result($R, 4); 
			$SESSION_DATA["agente"] 	= odbc_result($R, 5); 
			$SESSION_DATA["logged"] 	= 1;
		} else {
			echo "<li>Nome utente o Password ERRATI";
			$SESSION_DATA["logged"] = 0; 
			authenticate();
			exit ();
		}	
	} 
	$uid			= $SESSION_DATA["uid"];
	$nome			= $SESSION_DATA["nome"];
	$cognome  = $SESSION_DATA["cognome"];
	$filiale 	= $SESSION_DATA["filiale"];
	$level 		= $SESSION_DATA["level"];
	$agente 	= $SESSION_DATA["agente"];
/*	
	if ($_SERVER['SERVER_NAME'] == 'ghennetport') {
		echo "Auth User: " . $_SERVER['PHP_AUTH_USER'] . "<br>";
		echo "Filiale: " . $filiale . " - FilSession: " . $SESSION_DATA["filiale"] . "<br>";
		echo "Level: " . $level . "<br>";
		echo "Agente: " . $agente . "<br>";
	}
*/
?>
 
Mi rispondo da solo hehehehe :fonzie:

Problema individuato grazie al log di apache, la riga incriminata è questa:
PHP:
 echo "<li>Nome utente o Password ERRATI"; 
 $SESSION_DATA["logged"] = 0; 
 authenticate();

In poche parole inviavo dell'output prima dell'intestazione al browser. :D

Ciao a tutti
buon lavoro
 

Discussioni simili