back to top

Le sessioni in PHP

Un altro sistema di memorizzazione di informazioni è offerto dall’utilizzo delle sessioni. A differenza dei cookie le sessioni di PHP non scrivono nulla sul computer del utente, ma operano (quasi esclusivamente) sul nostro server scrivendo, all’interno di un’apposita cartella, degli specifici files dove vengono salvati alcuni dati importanti relativamente alla sessione di navigazione del nostro utente.

Questi file vengono poi "associati" al computer dei nostri utenti mediante due metodi:

  • attraverso l’utilizzo di un tipo particolare di cookie detto cookie di sessione;
  • oppure passando il parametro PHPSESSID all’interno di tutte le URL del sito visitate dallo stesso utente. Ad esempio:
www.miosito.it/pagina.php?PHPSESSID=............

NOTA: quest’ultima tecnica può presentare dei rischi di sicurezza tant’è che molti webmaster la disabilitano attraverso il file PHP.INI oppure mediante .htaccess

Una volta che la sessione sarà terminata il file con i dati della sessione stessa verrà eliminato così come il cookie di sessione presente sul computer client. Una sessione termina nel momento in cui l’utente chiude il browser (o in un diverso momento eventualmente specificato nelle impostazioni del server o nel codice dell’applicazione).

Le sessioni vengono utilizzate, ad esempio, nella gestione delle autenticazioni (login) degli utenti che, una volta loggati, verranno identificati come tali da tutte le pagine (.php) del sito.

La prima cosa da fare se vogliamo lavorare con le sessioni è impostare nel file di configurazione del PHP ("php.ini") la direttiva session.save_path, indicando la directory nella quale verranno salvate le informazioni sulle sessioni dei nostri utenti (se avete un sito in hosting non dovete fare nulla in quanto questo tipo di configurazione è già stato effettuato dal vostro provider di servizi).

La funzione da utilizzare all’interno delle nostre pagine PHP per aprire una sessione è session_start(). Questa funzione non prevede parametri.

La funzione session_start() deve essere necessariamente utilizzata prima dell’invio di output: nella parte precedente del nostro files .php non deve pertanto essere già stato scritto ed inviato del codice HTML (o altro tipo di output) il quale comprometterebbe il buon esito della nostra funzione.

Esempio di utilizzo delle sessioni con PHP

Facciamo un esempio per vedere, in concreto, come funziona session_start(). Poniamo di voler aprire una sessione dove salvare username e password del nostro utente (dati che ci sono stati forniti tramite un form di login). Ecco il codice:

<?php
//Apro la sessione e...
session_start();

//Recupero username e password dal form
$username = $_POST['user'];
$password = $_POST['pass'];

//Salvo i dati...
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
?>

A questo punto abiamo salvato all’interno della nostra sessione (grazie alla variabile superglobale $_SESSION) due diversi valori: username e password. Nelle successive pagine .php sarà molto semplice recuperare questi valori, ecco un esempio:

<?php
//Apro la sessione e...
session_start();

//Recupero i dati...
$username = $_SESSION['username'];
$password = $_SESSION['password'];

//facciamo una stampata a video!
echo "Ciao " . $username . " la tua password è " . $password;
?>

E’ bene precisare che la variabile superglobale $_SESSION non è altro che una semplice array e, come tale, può essere gestita. Se, ad esempio, vogliamo vedere tutti i valori salvati nella session potremo effettuare:

print_r($_SESSION);

Eliminare una sessione di PHP

Per finire vediamo come eliminare una sessione (ad esempio a seguito di logout).

//Per eliminare una specifica variabile di sessione useremo:
unset($_SESSION['username']);

//Per eliminare tutte le variabili di sessione useremo:
$_SESSION = array();
Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).