Newsgroup: it.comp.www.php
Titolo: gestire l'errore login fallito: come?

Salve a tutti,
come da oggetto, avendo preparato una sezione di un sito accessibile 
solo a chi è registrato, è stato previsto naturalmente un box di login.
Quando il login è sbagliato, l'utente viene dirottato su una pagina, 
nello specifico:
index.php?errore=log_fail
che produce un alert javascript "Errore di Login. Riprovare"
Naturalmente questa pagina con questa querystring è accessibile anche se 
digita manualmente.
Come sarebbe possibile dire alla pagina che se $_GET['errore'] viene da 
dal file che processa il login, allora mi apre l'alert, altrimenti no.
Suggerimenti?
Voi come realizzate un login?
Grazie a tutti come sempre.
Franz

 Suggerimenti?
Nella action della pagina di login metti la stessa pagina di login, e 
come method usi post.
Se la pagina viene richiamata in GET non fai niente e mostri il form di 
login. Se viene richiamata in post processi i dati, eventualmente mostri 
il messaggio di errore e poi mostri sempre il form. Se i dati sono giusti 
fai redirect dove devi.
Bye.


Ciao Alessandro,
grazie per la tua risposta.
Non avendo una pagina di login, ma un box presente in tutte le pagine, 
quando l'utente non viene autenticato, lo faccio comunque tornare in 
home page che presenta un messaggio d'errore grazie alla variabile $_GET.
Parte del codice del login process è:
.......
	$LoginRS__query = "CALL USR_LOGIN('".$loginUsername."', 
'".$password."', @out_id)";
	$LoginRS = $mysqli->query($LoginRS__query);
 
	$LoginRS = $mysqli->query('SELECT @out_id');
		while($row = $LoginRS->fetch_array())
		{
 
			if(empty($row[0]))
			{header("Location: ". $MM_redirectLoginFailed );
			$_SESSION['email'] = NULL;}
			else
			{
				.......
Dove $MM_redirectLoginFailed contiene index.php?errore=logfail
Come gli faccio fare il dirottamento sulla index.php inviandogli 
l'errore in $_POST?
Grazie
Franz

 l'errore in $_POST?
Non puoi. A questo punto ti converrebbe salvare l'errore in sessione, e 
nella index controlli se c'e` l'errore. Se c'e`, lo prendi, lo cancelli 
dalla sessione e lo visualizzi sulla pagina. Se non c'e` non fai niente.
E` la stessa cosa che fa il flashMessenger (che non ha niente a che 
vedere con flash) di ZendFramework. :)
Ma io ti consiglio la prima soluzione (pagina di login di fallback). Se 
noti, la usano quasi tutti i siti che prevedono login.
Bye.


Ma perchè non ho pensato alla sessione? Per la miseria a volte mi perdo 
in un bicchiere d'acqua...
Quanto alla pagina di login, il cliente ha perentoriamente detto che non 
la vuole. Ergo...mi arrangio.
Grazie Alessandro, sempre prezioso.
Franz

 vedere con flash) di ZendFramework. :)
Alessandro, o tutti voi altri, la storia della sessione funziona 
egregiamente ovviamente.
L'unica cosa che non va è la cancellazione della variabile di sessione.
In pratica se eseguo il codice qui in basso, non mi mostra l'errore di 
fallimento.
Io semplicemente gli dico:
controlla che ci sia questa variabile di sessione e che sia uguale 
all'errore.
Se sono soddisfatte entrambe le condizioni, svuota la sessione e 
mostrami l'alert.
Dove sbaglio? E' come se si svuotasse prima
if((isset($_SESSION['error'])) && ($_SESSION['error'] == 'login_failed'))
{
echo '<script type="text/javascript">$.prompt(\'<p><img 
src="images/dialog-error.png" style="float:left;margin-right:20px;" 
align="text-bottom">Attenzione! Login errato<br>Riprovare</p>\');
</script>';
                       unset($_SESSION['error']); 
}
Bah...
Franz

 la vuole. Ergo...mi arrangio.
In realtà forse Alessando intendeva dire un'altra cosa.
La procedura tipica è quella che prevede una pagina di transizione, da
dove, a seconda delle azioni compiute, vieni poi reindirizzato in altre
pagine tramite un header location.
Quindi tu puoi piazzare il tuo form dove ti pare perchè l'action del
form punta a questa pagina, si, ma il tutto è completamente trasparente
e invisibile.
Max
-- 
http://www.maxori.it
L'Arte è la capacità di fare cose di nessun valore
e di riuscire a venderle
F. Zappa

 Dove sbaglio? E' come se si svuotasse prima
Probabilmente e' una stupidata e sicuramente lo hai gia' fatto, ma 
session_start c'e'?
Ciao
-- 
MMM


Ciao,
:) si si c'è.
Altrimenti non mi funzionerebbe il controllo sul login.
Quello che non va è lo svuotamento dopo il controllo.
Franz

 L'unica cosa che non va è la cancellazione della variabile di sessione.
Prova ad usare l'unset prima dell'echo:
if (isset($_SESSION ecc.) and ecc. ) {
// io per sicurezza ne modificherei prima il valore, tante volte l'unset
// non avesse effetto (ricordo che un tempo, forse in php4, unset dava 
// problemi):
// $_SESSION['error']=array();
// dopo
unset($_SESSION['error']); 
echo '<script ecc.'
}
e controlla che non ci siano altri output prima di agire sulla sessione;
anche un solo spazio potrebbe compromettere l'intero script.
Ultima ma non ultima, anzi prima: ad inizio pagina inserisci:
error_reporting(E_ALL);
ché se il mio sospetto è fondato, dovresti ricevere un warning.
-- 
mailto: y = i
------------------------------------------------------
http://www.catarsi.it
Vivo nel terrore di non essere frainteso (Oscar Wilde)