PHP è un linguaggio di programmazione lato server che permette di creare applicazioni web dinamiche e interattive. Tuttavia, il protocollo HTTP su cui si basano le applicazioni web è stateless, cioè non mantiene alcuna informazione sullo stato della comunicazione tra il client (il browser) e il server. Questo significa che ogni richiesta HTTP è indipendente dalle precedenti e dalle successive, e che il server non ha modo di riconoscere se due richieste provengono dallo stesso client o da client diversi.
Per ovviare a questo problema, PHP offre due meccanismi per conservare informazioni sullo stato della comunicazione tra il client e il server: le sessioni e i cookie. Vediamo in cosa consistono e come si usano in PHP
Sessioni in PHP
Le sessioni sono un modo per conservare informazioni (in variabili) da utilizzare su più pagine. Le informazioni relative alla sessione sono memorizzate sul server, e sono associate a un identificativo univoco (ID) che viene inviato al client sotto forma di cookie. In questo modo, il server può riconoscere il client che ha iniziato la sessione e recuperare le informazioni ad esso associate. Per utilizzare le sessioni in PHP, bisogna prima di tutto avviare la sessione con la funzione `session_start()
`, che deve essere chiamata prima di qualsiasi output HTML.
Questa funzione crea la sessione (se non esiste già) e genera l'ID della sessione, che viene inviato al client come cookie. Inoltre, questa funzione rende disponibile l'array superglobale `$_SESSION
`, che contiene le variabili di sessione. Le variabili di sessione sono variabili che vengono memorizzate sul server e che sono accessibili da tutte le pagine che fanno parte della stessa sessione. Per impostare una variabile di sessione, basta assegnarle un valore nell'array `$_SESSION
`, ad esempio:
<?php
// Avvio la sessione
session_start();
// Imposto una variabile di sessione
$_SESSION['nome'] = 'Mario';
?>
Per accedere al valore di una variabile di sessione, basta usare l’array $_SESSION
, ad esempio:
<?php
// Avvio la sessione
session_start();
// Recupero il valore di una variabile di sessione
echo 'Ciao, ' . $_SESSION['nome'];
?>
Le variabili di sessione rimangono memorizzate sul server fino a quando la sessione non viene terminata. Per terminare una sessione, si può usare la funzione session_destroy()
, che elimina tutte le informazioni relative alla sessione sul server e sul client. Questa funzione va chiamata dopo aver avviato la sessione con session_start()
, ad esempio:
<?php
// Avvio la sessione
session_start();
// Termino la sessione
session_destroy();
?>
Cookie in PHP
I cookie sono dati salvati nel browser del client, utili per ricordare informazioni tra le visite al sito. I cookie sono inviati dal server al client tramite l’header HTTP Set-Cookie
, e sono restituiti dal client al server tramite l’header HTTP Cookie
. In questo modo, il server può inviare al client delle informazioni che saranno conservate nel browser e che potranno essere recuperate in seguito.
Per creare un cookie in PHP, si può usare la funzione setcookie()
, che accetta diversi parametri:
name
: il nome del cookie, che deve essere unico per ogni cookie.value
: il valore del cookie, che può essere una stringa o un numero.expire
: la data di scadenza del cookie, espressa in secondi dal 1 gennaio 1970. Se non viene specificata, il cookie scade alla fine della sessione del browser.path
: il percorso del sito in cui il cookie è valido. Se non viene specificato, il cookie è valido per tutto il sito.domain
: il dominio del sito in cui il cookie è valido. Se non viene specificato, il cookie è valido per il dominio corrente.secure
: un valore booleano che indica se il cookie deve essere inviato solo tramite una connessione sicura (HTTPS).httponly
: un valore booleano che indica se il cookie deve essere accessibile solo tramite il protocollo HTTP e non tramite altri linguaggi di scripting (come JavaScript).
La funzione setcookie()
deve essere chiamata prima di qualsiasi output HTML, altrimenti il cookie non verrà inviato. Ad esempio:
<?php
// Creo un cookie che scade dopo un'ora
setcookie('colore', 'rosso', time() + 3600);
?>
Per accedere al valore di un cookie, si può usare l’array superglobale $_COOKIE
, che contiene i cookie inviati dal client al server. Ad esempio:
<?php
// Recupero il valore di un cookie
echo 'Il tuo colore preferito è ' . $_COOKIE['colore'];
?>
I cookie possono essere modificati o eliminati usando la funzione setcookie()
con lo stesso nome del cookie e un valore diverso o vuoto. Per eliminare un cookie, si può anche impostare una data di scadenza nel passato. Ad esempio:
<?php
// Modifico il valore di un cookie
setcookie('colore', 'verde');
// Elimino un cookie
setcookie('colore', '', time() - 3600);
?>
Differenze di sicurezza tra cookie e sessioni
Sia le sessioni che i cookie sono utili per memorizzare informazioni sullo stato della comunicazione tra il client e il server, ma presentano anche delle differenze di sicurezza. Le principali differenze sono:
- Le sessioni sono memorizzate sul server, mentre i cookie sul client. Questo significa che le sessioni sono più sicure dei cookie, in quanto i dati sono protetti dal server e non sono accessibili da terze parti. I cookie, invece, sono vulnerabili a possibili attacchi come il furto, la modifica o la falsificazione dei cookie da parte di malintenzionati.
- Le sessioni sono identificate da un ID che viene inviato al client come cookie. Questo significa che se il cookie contenente l’ID della sessione viene rubato o falsificato, la sessione può essere compromessa. Per evitare questo problema, si può usare una connessione sicura (HTTPS) per inviare il cookie, o impostare il parametro
secure
atrue
nella funzionesetcookie()
. Inoltre, si può usare la funzionesession_regenerate_id()
per cambiare l’ID della sessione periodicamente e rendere più difficile il furto del cookie. - I cookie possono essere disabilitati dal client, impedendo al server di inviare o ricevere informazioni tramite i cookie. Questo significa che se si basa solo sui cookie per memorizzare informazioni, si può perdere la funzionalità del sito. Le sessioni, invece, funzionano anche se i cookie sono disabilitati, in quanto l’ID della sessione può essere passato tramite l’URL o tramite un campo nascosto in un form.
In conclusione, le sessioni e i cookie sono due meccanismi complementari per gestire lo stato della comunicazione tra il client e il server in PHP. Le sessioni sono più sicure e affidabili dei cookie, ma richiedono più risorse sul server. I cookie sono più leggeri e persistenti delle sessioni, ma sono più vulnerabili e dipendenti dal client. Per scegliere il meccanismo più adatto, bisogna valutare il tipo di informazioni da memorizzare, il livello di sicurezza richiesto e le preferenze dell’utente.