COOKIE E SESSIONI

php logoIl protocollo HTTP è stateless, cioè non mantiene lo stato. Creiamo un form con cui chiediamo all’utente se preferisce i colori chiari o scuri. Il fatto è che se l’utente immette una preferenza e naviga in un’altra pagina dell’applicazione noi perdiamo quell’informazione, ma anche se facciamo una nuova richiesta alla stessa pagina l’informazione viene persa. Immaginiamo un sistema di autenticazione in cui l’utente immette username e password, senza un meccanismo di conservazione dello stato, ad ogni nuova pagina ci verrebbero richieste username e password.

MANTENERE LO STATO

Per mantenere lo stato o memorizziamo le informazioni sul client con i cookie o sul server con il meccanismo delle sessioni. Quando parliamo di conservazione dei dati bisogna capire se questa deve avvenire per una singola pagina o deve rimanere memorizzata per giorni, anche se l’utente visita altri siti web.

L’ARRAY SUPERGLOBALE $_SESSION

Se vogliamo conservare lato server i dati nella comunicazione con un client utilizziamo le sessioni. La prima cosa da fare è avviare una sessione con la funzione session_start(). Se facciamo un var_dump($_SESSION) inizialmente l’array è vuoto, ma quando impostiamo un colore e facciamo il submit avremo il seguente Array.

var_dump_session

Quello che abbiamo fatto è la memorizzazione nell’array $_SESSION della preferenza del colore impostata dall’utente e che avviene dopo il submit del form.

code
Copy to Clipboard

Il risultato che vogliamo ottenere è che tale informazione sia presente anche in pagina2.php. Se facciamo un echo su $_SESSION[‘preferenzaColori’] in pagina2.php vedremo che l’informazione è stata mantenuta, cioè con le sessioni siamo stati in grado di mantenere l’informazione tra più richieste HTTP. Ma dove viene mantenuta l’informazione? Facciamo un echo session_save_path() per scoprirlo, nel mio sistema Windows 10 con XAMPP installato avrò:

path

SESSION PATH

Come vedi dall’immagine sopra riportata l’informazione è stata salvata in C:\xampp\tmp inoltre quando si avvia una sessione viene generato un ID di sessione che è un identificatore univoco. Apriamo il percorso nel terminale di visual studio code, ricordando L’ID di sessione.

ID_SESSION

L’informazione è stata memorizzata nel file sess_oek2qkbag1ao4kkc2i9e2kmsof apriamo questo file facendo click sul collegamento C:\xampp\tmp.

File_Session

Siamo riusciti a trovare dove PHP salva le proprie sessioni. L’informazione è conservata su una cartella del Server, quando il client effettua una nuova richiesta il server andrà a leggere le informazioni all’interno di questo file. Rimane una domanda a cui dobbiamo rispondere. Come fa il server a sapere in quale file di sessione recuperare le informazioni? Diciamo che ogni client ha la propria sessione e per rispondere alla domanda dobbiamo analizzare i Cookie che vedremo in un prossimo post.

STATO DELLA SESSIONE

Lo stato di una sessione lo possiamo conoscere attraverso la funzione session_status() al valore 1 corrisponde sessione non attiva, al valore 2 sessione attiva. Anziché utilizzare i valori numerici, possiamo usare le costanti PHP_SESSION_NONE e PHP_SESSION_ACTIVE.

state_session

Lo stato di una sessione diventa attivo quando viene invocata la funzione session_start(), viene creato anche un identificativo univoco per la sessione. Creiamo ora un’altra pagina PHP pagina3.php avviamo la sessione con session_start() e facciamo un echo del valore session_id(). L’ID di sessione creato è lo stesso della pagina  SESSION_STATUS.php da dove è stata invocata per la prima volta session_start().

SESSION ID

Questo vuol dire che solo alla prima invocazione di session_start() viene creato un nuovo ID di sessione, se si invoca nuovamente la funzione viene recuperata la sessione attiva e il suo ID. Grazie a questo meccanismo che prevede la generazione di un ID di sessione che non cambia tra le varie richieste, lato server siamo in grado di mantenere lo stato. Siamo cioè  in grado di mantenere le informazione con un client all’interno di una sessione di navigazione.

Session_ID

CAMBIARE IL PATH DI SESSIONE

Creiamo ora una cartella sessioni dentro il folder ArraySuperglobali. Volendo possiamo cambiare il path in cui vengono memorizzate le sessioni, questa non è di sicuro una buona scelta per la sicurezza ma volendo si può fare. Il codice seguente illustra come.

session_path

APPROFONDIMENTO

L’array super globale $_SESSION in PHP è una struttura dati che permette di conservare informazioni specifiche per ogni utente durante la sua navigazione su un sito web. Questo array viene utilizzato per gestire le sessioni, che sono particolarmente utili per mantenere uno stato tra diverse pagine visitate dallo stesso utente, come per esempio il login o il carrello degli acquisti in un e-commerce.

Caratteristiche principali di $_SESSION:

1. Persistenza tra richieste: A differenza di altre variabili, i dati memorizzati in $_SESSION persistono attraverso diverse richieste HTTP. Ciò significa che puoi salvare informazioni su un utente quando visita una pagina e poi recuperarle quando visita un’altra pagina.

2. Archiviazione sul server: I dati di sessione sono memorizzati sul server, e non nel browser dell’utente. Solo l’identificatore di sessione (un piccolo cookie con un ID univoco) viene inviato al client.

3. Accesso globale: L’array $_SESSION è super globale, quindi è accessibile da qualsiasi parte del codice PHP, senza necessità di passare la variabile tra funzioni o file.

4. Sicurezza: Essendo memorizzati sul server, i dati della sessione sono generalmente più sicuri rispetto ai dati memorizzati nei cookie, poiché non possono essere modificati direttamente dall’utente.

Esempio di utilizzo di $_SESSION:

// Avvia la sessione
session_start();

// Memorizza un valore nella sessione
$_SESSION[‘username‘] = ‘Mario Rossi‘;

// Recupera un valore dalla sessione
echo ‘Ciao, ‘ . $_SESSION[‘username‘]; // Output: Ciao, Mario Rossi

// Rimuove un valore dalla sessione
unset($_SESSION[‘username’]);

// Distrugge la sessione
session_destroy();

Passi per utilizzare $_SESSION:

1. Avvio della sessione: Prima di poter utilizzare $_SESSION, è necessario avviare una sessione con session_start(). Questa funzione deve essere chiamata all’inizio di ogni script PHP che accede ai dati di sessione.

2. Memorizzazione dei dati: Per memorizzare un valore, basta assegnarlo all’array $_SESSION con una chiave specifica.

3. Recupero dei dati: Per accedere ai dati memorizzati, è sufficiente richiamare il valore associato alla chiave desiderata nell’array $_SESSION.

4. Rimozione dei dati: Puoi rimuovere un singolo valore usando unset() oppure distruggere l’intera sessione con session_destroy().

Considerazioni sulla sicurezza:

È importante proteggere le sessioni da attacchi come il session hijacking o il session fixation. Alcuni suggerimenti includono:

• Utilizzare sessioni HTTPS per proteggere i cookie di sessione.

• Rigenerare l’ID di sessione dopo un login con session_regenerate_id().

• Impostare correttamente le direttive di sessione come session.cookie_secure e session.cookie_httponly.

In conclusione, $_SESSION è uno strumento potente e versatile per gestire lo stato di un’applicazione web, garantendo un’esperienza utente coerente e sicura.

LINK AI POST PRECEDENTI

IL LINGUAGGIO PHP

LINK AL CODICE SU GITHUB

GITHUB