Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 35 di 67
  • livello intermedio
Indice lezioni

Gestire le sessioni in PHP

Cosa sono le sessioni e come generarle, configurarle, inizializzarle e renderle persistenti con le funzioni messe a disposizione da PHP.
Cosa sono le sessioni e come generarle, configurarle, inizializzarle e renderle persistenti con le funzioni messe a disposizione da PHP.
Link copiato negli appunti

Le sessioni sono un meccanismo alternativo ai cookie per memorizzare informazioni relative all'utente. A differenza dei cookie che vengono salvati sul client, ovvero sul dispositivo dell'utente tramite browser, la sessione memorizza le informazioni sul server che ospita l'applicazione.

Di default la sessione salva i dati in file testuali salvati nel file system del server. È possibile, però, modificare tale configurazione in maniera da salvarle anche su database, Memcache, Redis, e così via. Tutte alternative molto utili quando si lavora, ad esempio, con applicazioni che risiedono in server differenti.

L'associazione utente/sessione avviene nella maggior parte dei casi attraverso un cookie che contiene l'id della sessione.

Un altro metodo con cui è possibile accedere alla sessione consiste nel passare come parametro in query string il PHPSESSID, ad esempio:

http://test.com/?PHPSESSID=123nd12312

Questa modalità è del tutto sconsigliata per motivi di sicurezza, tanto che in molte configurazioni PHP è disattivata del tutto.

La durata di una sessione, così come avviene per i cookie, può essere decisa dallo sviluppatore. Se non diversamente specificato essa scadrà alla chiusura del browser.

L'uso più comune che viene fatto di una sessione è quello di implementare un sistema di autenticazione su un sito Web. Una volta verificato che le credenziali di accesso sono valide, infatti, è utile memorizzare le informazioni dell'utente su una sessione così da non doverle ricaricare da database all'apertura di ogni pagina.

Inizializzare una sessione

Una sessione, per poter essere utilizzata, ha bisogno di essere inizializzata. Come per i cookie è necessario inizializzarla prima che qualsiasi output sia già stato inviato alla pagina.

La funzione per inizializzare una sessione si chiama session_start(). Essa prende in ingresso un array di opzioni che, se impostate, vanno a sovrascrivere quelle di default impostate nel php.ini. Per sapere quali sono tali impostazioni si può fare riferimento alla documentazione ufficiale.

<?php
session_start();
//sessione inizializzata

Una volta inizializzata la sessione possiamo accedere ai dati relativi e, di conseguenza, poterne aggiungere altri. Se non abbiamo modificato la configurazione di PHP e facciamo un dump dell'array $_COOKIE, noteremo che è stata creata una entry chiamata PHPSESSID che contiene l'id della sessione appena generata. Questo a conferma di quanto detto in precedenza riguardo all'associazione utente/sessione.

Accedere ai dati di una sessione

Una volta inizializzata una sessione, le informazioni sono salvate all'interno dell'array $_SESSION. Supponiamo quindi di voler memorizzare il nome dell'utente in sessione, possiamo creare una chiave nell'array:

<?php
session_start();
$_SESSION['name'] = 'Simone';
echo $_SESSION['name']; //stamperà il nome in sessione

Come per i cookie, è possibile rimuovere una proprietà dalla sessione attraverso l'unset su di essa:

<?php
session_start();
$_SESSION['name'] = 'Simone';
unset($_SESSION['name']);

Se volessimo rimuovere tutte le variabili in sessione, invece, possiamo utilizzare la funzione apposita:

<?php
session_start();
$_SESSION['name'] = 'Simone';
session_unset(); //svuota tutte le variabili di sessione

Distruggere una sessione

Una volta che la sessione non è più necessaria, ad esempio al logout di un utente, possiamo distruggerla attraverso la funzione session_destroy():

<?php
session_start();
$_SESSION['name'] = 'Simone';
session_destroy(); //a questo punto la sessione non è più disponibile per l'utente

Mantenere la sessione tra diversi file

Una sessione inizializzata in un file, ad esempio login.php, non viene mantenuta automaticamente se accediamo ad un'altra pagina. Ragione per cui all'inizio di ogni file che utilizziamo è necessario richiamare session_start() che, nel caso in cui la sessione sia già stata creata, la recupera con i dati salvati in precedenza.

Ti consigliamo anche