Le sessioni in PHP 5

Le sessioni in PHP ci consentono di trasferire informazioni da una pagina ad un’altra.
Il classico esempio potrebbe essere il caso di un’area riservata alla quale si accede tramite un form di login. Senza l’ausilio delle sessioni (e in particolare dei cookies che esse utilizzano) sarebbe difficile, oltre che strutturalmente scorretto, ricordare il login dell’utente una volta che chiude il browser oppure quando passa ad una pagina successiva.

Nella nostra pagina di login dove è presente il form per l’inserimento delle credenziali, come primissima cosa diciamo al server di iniziare una nuova sessione:

<?php session_start() ?>
/* qui ci sarà il form */

La pagina, una volta inviati i dati dal form, dovrà controllare che le credenziali siano corrette. Se lo sono possiamo salvarci dei dati grazie alla superglobale $_SESSION in questo modo:

<?php
     // salvo l'id utente
     $_SESSION['id_utente'] = $id_utente;
?>

Una volta che abbiamo salvato il nostro dato, possiamo utilizzarlo nelle pagine che seguiranno (come ad esempio una pagina della scheda di un documento riservato) in questo modo:

<?php
     session_start();
 
     if(isset($_SESSION['id_utente'])){
          // l'utente è loggato
     } else{
          die('Area ad accesso riservato');
     }
?>

Come vedete è sempre necessario inizializzare la sessione con session_start().
La primissima cosa che potrebbe venirci in mente è quella di salvarci in un’altra variabile di sessione (cookie) la password dell’utente criptata, in modo tale da effettuare il controllo della coppia id_utente – password nel nostro database.

Per concludere vediamo ora come si chiude una sessione, ad esempio per la classica azione di logout di un utente:

<?php
     session_start();
     $_SESSION = array(); // svuoto la superglobale
     session_destroy();          
?>

Attenzione
Una volta settata una variabile di sessione (cookie) è necessario eseguire un header(‘Location’) per fare in modo che la pagina stessa riconosca il cookie settato.
Ad esempio, se abbiamo il form di login contenuto nella pagina area_riservata.php e vogliamo fare in modo che, se l’utente è loggato, visualizzi un elenco di documenti, altrimenti visualizzi il form, dobbiamo fare in questo modo:

<?php
     session_start();     
 
     if($_POST['azione'] == 'invia_form'){
          // salvo l'id utente
          $_SESSION['id_utente'] = $id_utente;
          header('Location /area_riservata.php');
          exit;
     }
 
     if(isset($_SESSION['id_utente'])){
          // l'utente è loggato, visualizzo elenco doc
     } else{
          // l'utente non è loggato, visualizzo il form di login
     }
?>

Approfondisci

Validazione e filtro dell’input di un utente. La nuova filter_var()

Oggi mi sono trovato di fronte al classico form di registrazione di un utente con relativo form di login.
La mia prima preoccupazione è stata ovviamente la validazione e il filtraggio dell’input dell’utente.

Ero già pronto a prendermi le classiche espressioni regolari per controllare email, input di testo, date ecc… Ma proprio oggi leggevo un interessantissimo articolo su mattiasgeniar.be, un buon blog di uno sviluppatore, dove veniva presentata un’innovativa soluzione, introdotta con PHP5, per validare e filtrare l’input degli utenti: filter_var().

Ammetto di essere rimasto affascianato dalla semplicità con cui ora posso validare e filtrare i dati.
Ecco alcuni esempi (Attenzione: filter_var() è presente SOLO da PHP5 in poi).

Validazione di una mail:

<?php
   if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) echo 'Email non valida';
?>

Strip di tutto ciò che non è una stringa (pensiamo ad esempio ad un commento nel nostro blog):

<?php
   $commento = "<h1>Ciao a tutti, il mio <a href='http://www.google.it'>blog è qui</a></h1>";
   $commento = filter_var($commento, FILTER_SANITIZE_STRING);
   // Restituisce Ciao a tutti, il mio blog è qui
?>

E questi sono solo due semplicissimi esempi che solitamente necessitano di strip_tags, espressioni regolari ecc…
Onestamente trovo questo filter_var una vera manna!

Vi lascio il link di tutti i possibili parametri (sono veramente molti) per la filter_var:
http://mattiasgeniar.be/2009/02/07/input-validation-using-filter_var-over-regular-expressions/

Approfondisci

PHP: strip_tags, eliminare tag HTML da un testo con eccezioni

Tutti noi sappiamo che per eliminare i tag HTML da una stringa (ad esempio da un form inviato da un utente) possiamo utilizzare la comoda funzione nativa di PHP strip_tags().

Se abbiamo ad esempio una stringa inviata da un utente malintezionato, che vuole inserire del codice HTML (un link ad un sito ad esempio…) possiamo fare così:

$commento = strip_tags($_POST['commento']);

E se volessimo invece abilitare all’utente la possibilità di mettere un testo in grassetto?

Possiamo fare così:

$commento = strip_tags($_POST['commento'],'<strong>');

Nel caso volessimo abilitare più di un tag possiamo utilizzare questa sintassi:

$commento = strip_tags($_POST['commento'],'<strong>,<a>');

In questo modo l’utente avrà la possibilità di mettere link e grassetti.

Attenzione: strip_tags() elimina tutti i tag HTML, ma anche i tags PHP !

Per approfondimenti: http://it2.php.net/manual/it/function.strip-tags.php

Approfondisci