La procedura di autenticazione per il back-end del piccolo blog engine d'esempio si articolerà in tre fasi:
Di seguito viene presentato il codice necessario per il login, compreso di form per l'invio dei dati di autenticazione, i commenti aiuteranno nella comprensione dei diversi passaggi ma verranno fornite successivamente ulteriori informazioni sul suo funzionamento:
<?php
// inizializzazione della sessione
session_start();
// se la sessione di autenticazione
// è già impostata non sarà necessario effettuare il login
// e il browser verrà reindirizzato alla pagina di scrittura dei post
if (isset($_SESSION['login']))
{
// reindirizzamento alla homepage in caso di login mancato
header("Location: gestisci.php");
}
// controllo sul parametro d'invio
if(isset($_POST['submit']) && (trim($_POST['submit']) == "Login"))
{
// controllo sui parametri di autenticazione inviati
if( !isset($_POST['username']) || $_POST['username']=="" )
{
echo "Attenzione, inserire la username.";
}
elseif( !isset($_POST['password']) || $_POST['password'] =="")
{
echo "Attenzione, inserire la password.";
}else{
// validazione dei parametri tramite filtro per le stringhe
$username = trim(filter_var($_POST['username'], FILTER_SANITIZE_STRING));
$password = trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING));
$password = sha1($password);
// inclusione del file della classe
include "funzioni_mysql.php";
// istanza della classe
$data = new MysqlClass();
// chiamata alla funzione di connessione
$data->connetti();
// interrogazione della tabella
$auth = $data->query("SELECT id_login FROM login WHERE username_login = '$username' AND password_login = '$password'");
// controllo sul risultato dell'interrogazione
if(mysql_num_rows($auth)==0)
{
// reindirizzamento alla homepage in caso di insuccesso
header("Location: index.php");
}else{
// chiamata alla funzione per l'estrazione dei dati
$res = $data->estrai($auth);
// creazione del valore di sessione
$_SESSION['login'] = $res-> id_login;
// disconnessione da MySQL
$data->disconnetti();
// reindirizzamento alla pagina di amministrazione in caso di successo
header("Location: gestisci.php");
}
}
}else{
// form per l'autenticazione
?>
<h1>Accesso all'amministrazione:</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Username:<br />
<input name="username" type="text"><br />
Password:<br />
<input name="password" type="password" size="20"><br />
<input name="submit" type="submit" value="Login">
</form>
<?
}
?>
Commentando il funzionamento del codice proposto è possibile fornire la seguente descrizione:
filter_var() che grazie all'argomento FILTER_SANITIZE_STRING permetterà di filtrare gli input evitando stringhe potenzialmente pericolose per l'applicazione e i dati da essa gestiti;SELECT username_login) dove i parametri di input sono identici ai valori memorizzati nei campi "username_login" e "password_login" (WHERE username_login = '$username' AND password_login = '$password'); l'operatore di confronto AND consente di introdurre un nuovo criterio di selezione oltre quello già proposto tramite WHERE, essa restituisce TRUE soltanto nel caso in cui entrambi i confronti effettuati producano un risultato positivo.mysql_num_rows() è una funzione nativa di PHP che ha il compito di restituire il numero di righe coinvolte da un risultato per le istruzioni SELECT, accetta come parametro l'esito della query passata a mysql_query() e può essere utilizzata per procedure di controllo; nel caso del codice proposto, per esempio, il numero di righe coinvolte dall'interrogazione non potrà essere uguale a "0", diversamente l'esito del confronto tra gli input inviati e il contenuto della tabella sarebbe negativo e l'autenticazione non avrebbe luogo.mysql_num_rows() dovesse restituire "0" allora il login fallirebbe e il browser dell'utente subirà una rindirizzamento alla homepage del blog.estrai() che estrarrà dalla tabella il valore relativo al campo "id_login" e lo utilizzerà per creare un valore di sessione che permetterà di accedere alle altre pagine dell'amministrazione.
Sessioni PHP: cosa sono, come si usanoDalla configurazione di PHP, alla gestione delle sessioni in un... |
Continuous Integration: automatizziamo i client con PhingContinuous Integration: automatizziamo i client con Phing. Esempi... |
Archiviazione delle applicazioni PHP con PharCome incorporare intere applicazioni PHP all'interno di un singolo... |
I traits in PHP 5.4Cosa sono, a cosa servono e come si unsano i traits, la novità per... |
PHP 5.4: il web server integratoImpara ad usare il web server integrato nella versione 5.4 di PHP:... |
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Guida PHP con Windows e IISInstallare ambienti per lo sviluppo e la produzione di applicazioni... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |