Passa ai contenuti principali

Lezione classi IV e V sez D e E Corso SIA: Login con le sessioni in PHP senza database

Lezione sulle variabili di sessione.

Martedì 6 ottobre classe 5 D SIA, 
Giovedì 8 ottobre 4 D SIA,
Venerdì 9 ottobre 5 E SIA

Sabato 10 ottobre 4 E SIA

Prima di provare questo esercizio è fondamentale conoscere i concetti di cookie e di sessione.

I cookie HTTP (più comunemente denominati cookie web, o per antonomasia cookie)[1] sono un tipo particolare di magic cookie, una sorta di gettone identificativo, usato dai server web per poter riconoscere i browser durante comunicazioni con il protocollo HTTP usato per la navigazione web. Tale riconoscimento permette di realizzare meccanismi di autenticazione, usati ad esempio per i login; di memorizzare dati utili alla sessione di navigazione, come le preferenze sull'aspetto grafico o linguistico del sito; di associare dati memorizzati dal server, ad esempio il contenuto del carrello di un negozio elettronico; di tracciare la navigazione dell'utente, ad esempio per fini statistici o pubblicitari. Date le implicazioni per la riservatezza dei naviganti del web, l'uso dei cookie è categorizzato e disciplinato negli ordinamenti giuridici di numerosi paesi, tra cui quelli europei, inclusa l'Italia (fonte Wikipedia).

Le sessioni
Il comune protocollo HTTP che conosciamo, non ha la possibilità di memorizzare i dati trasmessi tra client (il pc di chi naviga nel sito, per intenderci) e server: una volta inviati e ricevuta la risposta, i dati vengono persi.
Fortunatamente sono state create le variabili di sessioni, cioè variabili capaci di tenere attivi gli scambi tra client e server fino alla chiusura del nostro browser.
Come funzionano? La prima volta che il client fa la chiamata al server viene generato un ID, che è unico e quindi identifica senza errori il mittente, e lo salva in un file all’interno del server stesso. A questo punto il motore php genera un cookie che sarà inviato al client e che conterrà quell’ID identificativo.
Il meccanismo è semplice: la prossima volta che si farà una chiamata allo stesso server, questo leggerà il contenuto del cookie e saprà a quale client appartiene.
L’identificativo è chiamato SID ed è una stringa di 32 caratteri alfanumerici.
L’esempio di uso più comune è la login. Una volta inserite username e password, i dati dell’utente saranno salvati in variabili di sessione: fino a quando queste variabili esistono, l’utente potrà continuare a navigare nell’area riservata. Alla chiusura del browser, le variabili si perdono (e in questo caso, perché l’utente al ritorno sia ancora loggato, si deve far uso di altri strumenti, come i cookies).
Un altro esempio è il carrello di un negozio online: una volta scelto un prodotto, questo va a finire nel carrello. L’utente potrà poi navigare nel sito in cerca di altri prodotti da aggiungere al carrello o eliminare elementi dal carrello stesso. Tutto questo può essere gestito dalle nostre variabili di sessione, che tengono tracce delle azioni dell’utente (aggiunta, eliminazione, ecc.).
Una nota: l’uso di variabili di sessione è molto utile in certi casi, ma non indispensabile e può essere sostituito da metodi diversi. Il carrello citato sopra, per esempio, può essere tranquillamente fatto appoggiandosi a un database e ai cookies; allo stesso modo, l’accesso a un’area riservata può essere gestito con cookies e variabili comuni. Il metodo di uso è, come sempre, personale, ma prima di decidere quale usare si deve conoscere i vari approcci.
fonte: http://www.manuelmarangoni.it/sir-bit/1180/php-cosa-sono-le-variabili-di-sessione-e-come-si-usano/

 Login con le sessioni in PHP senza database

1. realizzare una piccola form per permettere all’utente di loggarsi
2.creare uno script per il controllo delle credenziali
3. realizzare uno script da incollare in ogni pagina per il controllo delle credenziali


Form di Login
Il primo è presto fatto: non facciamo altro che aprire un file con estensione php e incollare questo codice:
<html>
<head>
<title>Login Area</title>
</head><body>
<?php
if(isset($_GET['error_login']))
{
echo “Error ,please compile correctly the form!”;
}
?>
<form method=”post” action=”login2.php”>
<table>
<tr>
<td>Username</td>
</tr>
<tr>
<td><input type=”textbox” name=”user” id=”user” /></td>
</tr>
<tr>
<td>Password</td>
</tr>
<tr>
<td><input type=”text” name=”pass” id=”pass”/></td>
</tr>
<tr>
<td><input type=”submit” value=”Log In” /></td>
</tr>
</table>
</form>
</body>
</html>
 Il codice è molto semplice: realizziamo una semplice form html con soli due text, una per inserire lo user, l’altra per la password ( ricordate il type=”password” in modo tale che i caratteri digitati siano nascosti da un punto), l’importante è settare il method a post ( il metodo per lo scambio delle informazioni) e soprattutto l’attributo action=”login2.php” , il cui nome dovrà corrispondere al nome della pagina script incaricata di controllare le nostre credenziali. Il codice php all’inizio della pagina ci servirà successivamente per segnalare all’utente un errato inserimento dei dati; tale messaggio di errore verrà stampato a video solo se una variabile get ( quelle variabile che compaiono nell’url della pagina preceduta dal punto di domanda) è settata ad un certo valore.

Controllo credenziali
Singolo Utente:Apriamo un file con estensione php e inseriamo questo codice php, ricordandoci di salvarlo come login2.php o comunque con lo stesso nome dell’attributo method:
<?php
session_start();
$user=”user”;
$pass=”password”;
$page_to=”http://pralevis.com/wordpress/“;
if(isset($_POST['user']) && isset($_POST['pass']))
{
if( $_POST['user']==$user && $_POST['pass']==$pass)
{
$_SESSION['isLogged']=”true”;
header(“Location:”.$page_to);
}
else
{
header(“Location:login.php?error_login=1″);
}
}
else
{
header(“Location:login.php?error_login=1″);
}
?>
Prima di tutto creiamo una sessione con session_start() e salviamo in due variabili php lo user e la password necessari per accedere al sito. Successivamente assegniamo a $page_to l’indirizzo assoluto ( o relativo ) a cui si potrà accedere dopo che l’utente si sarà loggato correttamente. I successivi due if controllano se sono state passate delle variabili tramite il form di login e se tali valori sono equivalenti a quelli definiti precedemente: in caso positivo,verrà salvato una variabile in sessione per confermare il corretto login e verrà inviato direttamente alla pagina di portale, in caso negativo, verrà immediatamente fatto ritornare alla pagina di login inserendo nell’url una variabile che farà scattare il messaggio di errore (login.php?error_login=1).
Multiutente: in caso di più utenti, saremmo costretti a fare una ricerca su un array precostruito. Ecco il codice:
<?php
session_start();
$utenti[0]["user"]=”user1″;
$utenti[0]["pass"]=”pass1″;
$utenti[1]["user"]=”user2″;
$utenti[1]["pass"]=”pass2″;
$utenti[2]["user"]=”user3″;
$utenti[2]["pass"]=”pass3″;
$page_to=”http://pralevis.com/wordpress/“;
$isLogged=false;
if(isset($_POST['user']) && isset($_POST['pass']))
{
for($i=0;$i<count($utenti);$i++)   {
if( $_POST['user']==$utenti[$i]["user"] && $_POST['pass']==$utenti[$i]["pass"] )
 {
 $isLogged=true;
 }
}
if($isLogged)
{
 $_SESSION['isLogged']=”true”;
 header(“Location:”.$page_to);
}
else
{
header(“Location:login.php?error_login=1″);
}
 }
else {
header(“Location:login.php?error_login=1″);
}
?>
Dopo aver creato l’array multidimensionale ( creiamo una coppia User-pass con relativo intero crescente per ogni utente che desideriamo includere nel nostro sito), parte la ricerca dentro la struttura dati, in caso positivo setto una variabile booleana ( $isLogged) a true, e successivamente tramite esso eseguo il redirect alla pagina del sito, altrimenti all’uscita del ciclo la variabile rimane inizializzata a falso e scatta il ritorno al form di login.

Funzione di Controllo credenziali

Fatto ciò, non rimane altro che impedire l’accesso alle altre pagine del nostro portale previa autenticazione. Per fare ciò, non ci basterà altro che modificare l’estensione dei nostri file se questi sono dei html ( dovranno ora diventare dei file con estensione .php ) e copiare questo codice php all’inizio della pagina PRIMA di ogni altra cosa:
<?php
session_start();
if(!isset($_SESSION['isLogged']))
{
header(“Location:login.php?error_login=1″);
}
else {
if($_SESSION['isLogged']!=”true”)
{
header(“Location:login.php?error_login=1″);
}
}?>
http://lab.pralevis.com/Documents/PHP/Login/login.zip

Questo codice effettua due controlli: se non esiste l’array di sessione o se il valore non è settato correttamente, esso farà un redirect alla nostra solita pagina di login, altrimenti non eseguirà alcun comando e l’utente sarà libero di accedere alla pagina una volta che ‘html sarà visualizzato.
Come vedete gli script sono molto banali e sono stati spogliati di ogni altra funzionalità ( non vi è filtraggio degli input per togliere eventuali input sporchi, ne controlli lato client per evitare di lasciare vuoti i campi…) ed appaiono estremamente semplici e pronti a qualunque modifica.Il codice di questi script sarà consultabile e scaricabile presso il repository Lab.
fonte originale: http://pralevis.com/wordpress/?p=341

Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)