Accesso ad area riservata

nome del file: Login.php

<html>

<head>

<title<>/title>

<link rel="stylesheet" type="text/css" href="iTestStili.css">

</head>

<body>

<div id="intestazione">

  Test di verifica dell'apprendimento.

</div>

<div id="areaStampa">

<?php

require("account.php");

mysql_connect($Sweb, $utente, $pw)

  or

die(mysql_error());

Viene avviata una connessione al server mysql. Se l'operazione non riesce viene mostrato un messaggio di errore.

mysql_select_db("iTest")

  or

die(mysql_error());

Viene selezionato il data base contenente gli account degli utenti.

if(isset($_COOKIE['Autenticato'])){

  $utente = $_COOKIE['Autenticato'];

  $pass = $_COOKIE['Riconosciuto'];

L'utente che è entrato in questa pagina dopo aver compilato il form di Login ha inviato anche due cookie: quello denominato «Autenticato» contiene il nome utente, mentre quello denominato «Riconosciuto» contiene la password. Se il client ha spedito questi cookie, da essi, vengono lette le credenziali: nome utente e password.

  $esito = mysql_query("SELECT * FROM studenti WHERE utente = '$utente'")

    or

  die(mysql_error());

Si interroga il data base per ottenere il record corrispondente all'utente autenticato. Nella variabile $esito c'è il risultato della query

  while($info = mysql_fetch_array( $esito )) {

    if ($pass != $info['pass']) {

    } else {

      header("Location: index.php");

    }

  }

La variabile $esito è una tabella temporanea contenente tutti i record che soddisfano la condizione di ricerca. La funzione mysql_fetch_array preleva una riga della tabella e la deposita nella variabile $info, che in tal modo diventa un array associativo i cui indici sono i nomi dei campi della tabella. Da questo array associativo si preleva il campo password. Se questa password non corrisponde a quella fornita si ripropone il modulo di login, altrimenti si redireziona il browser del client alla pagina index.php, ovvero all'area riservata.

} //Termine della sezione eseguita se l'utente ha inviato il cookie

  if (isset($_POST['invio'])) {

    if(!$_POST['utente'] | !$_POST['pass']) {

      die('completa tutti i campi.');

    }

Se la richiesta è pervenuta da un form si verifica se sono stati compilati i campi nome utente e password.

    $esito = mysql_query("SELECT * FROM studenti WHERE utente = '" .

                    $_POST['utente']."'") or die(mysql_error());

    $esistente = mysql_num_rows($esito);

con i due campi "nome utente" e "password" si interroga il data base per prelevare il record che soddisfa il requisito di ricerca. La funzione mysql_num_rows restituisce il numero di righe della tabella temporanea ottenuta dalla query.


    if ($esistente == 0) {

      echo '<p>il nome utente non esiste nel nostro archivio.</p>';

    die('<a href="creaStudente.htm">registrati</a> come studente');

  }

Se il numero di righe ottenuto è zero significa che non esiste nessun record associato all'utente.

  while($info = mysql_fetch_array($esito )) {

    $_POST['pass'] = stripslashes($_POST['pass']);

    $info['pass'] = stripslashes($info['pass']);

    $_POST['pass'] = md5($_POST['pass']);

    if ($_POST['pass'] != $info['pass']) {

      die('password errata, ripeti.');

Altrimenti si verifica se la codifica md5 della password corrisponde a quella letta dal data base. Se non corrisponde si interrompe lo script.

    } else {

se l'autenticazione è riconosciuta si invia un cookie

      $_POST['utente'] = stripslashes($_POST['utente']);

      $durata = time() + 3600;

      setcookie('Autenticato', $_POST['utente'], $durata);

      setcookie('Riconosciuto', $_POST['pass'], $durata);

e l'utente viene reindirizzato nell'area riservata. Durante questo reindirizzamento il client oltre ad inviare la richiesta della pagina, invia anche il cookie

      header("Location: index.php");

    }

  }

} else {

se si è giunti in questa pagina scrivendo l'indirizzo nella barra del browser, cercando di raggirare il controllo, viene inviato il form di login al client.

?>

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">

<table border="0">

<tr><td colspan=2><h1>Login</h1></td></tr>

<tr><td>Nome Utente:</td><td>

<input type="text" name="utente">

</td></tr>

<tr><td>Password:</td><td>

<input type="password" name="pass">

</td></tr>

<tr><td colspan="2" align="right">

<input type="submit" name="invio" value="Login">

</td></tr>

</table>

</form>

<?php

}

?>

<p>Se non hai un account vai alla pagina di <a href="creaStudente.htm">registrazione</a></p>

</div>

</body>

<html>


nome del file: index.php

<html>

<head>

<title></title>

<link rel="stylesheet" type="text/css" href="iTestStili.css">

</head>

<body>

<div id="intestazione">

  Test di verifica dell'apprendimento.

</div>

<div id="areaStampa">

<?php

require("account.php");

mysql_connect($Sweb, $utente, $pw)

or

die(mysql_error());

mysql_select_db("iTest")

or

die(mysql_error());

if(isset($_COOKIE['Autenticato'])) {

  $utente = $_COOKIE['Autenticato'];

  $pass = $_COOKIE['Riconosciuto'];

Controllo della presenza dei cookie. Se ci sono, vengono letti i valori che essi contengono: Utente e Password.

  $esito = mysql_query("SELECT * FROM studenti WHERE utente = '$utente'")

    or

  die(mysql_error());

interrogazione del data base con i dati contenuti nei cookie.

  while($info = mysql_fetch_array( $esito )) {

    if ($pass != $info['pass']) {

      header("Location: login.php");

Se la password nel cookie è differente da quella contenuta nel data base l'utente viene inviato alla pagina di autenticazione.

    } else {

      switch($info['Privilegi']) {

        case 'docente':

          echo "<p>Inserimento questionario</p>";

          echo "<p>Consultazione dei risultati</p>";

          echo "<p>Manutenzione</p>";

          echo "<a href=logout.php>Logout</a>";

          break;

        case 'studente':

          echo "<p>Scegli il test</p>";

          echo "<p>Consulta i punteggi</p>";

          echo "<a href=logout.php>Logout</a>";

          break;

        default:

          echo "<p>Ruolo non identificato. Ripetere <a href='login.php'>la registrazione<a>.</p>";

          exit();

          break;

      }

    }

  }

} else {

  header("Location: login.php");

}

?>

</body>

</html>


Uscita dall'Area Riservata

Nome del File: Logout.php.

<?php

$durata = time() - 100;

setcookie('Autenticato', 'finito', $durata);

setcookie('Riconosciuto', 'finito', $durata);

header("Location: login.php");

?>

Si imposta la scadenza del cookie e si ritorna alla pagina di autenticazione.