L'array $_SESSION in PHP
Come già detto, le sessioni sono un modo per conservare i dati dell'utente mentre naviga tra le pagine di un sito web, ad esempio quando un utente effettua l'accesso ad un sito tramite nome utente e password, questi vengono memorizzati in una sessione. In questo modo, ogni volta che l'utente accede a una pagina protetta del sito web, il server può verificare che l'ID di sessione corrisponda ai dati memorizzati nella sessione e consentire l'accesso solo se l'autenticazione ha avuto successo.
Per gestire i dati delle sessioni in PHP possiamo usare l'array superglobale $_SESSION, esso contiene i valori di sessione per un utente specifico. Viene utilizzato per mantenere informazioni persistenti durante la navigazione di un utente sul sito web, ad esempio per memorizzare le preferenze dell'utente, il contenuto del carrello della spesa, l'username e password ecc... I valori memorizzati in $_SESSION possono essere recuperati e utilizzati in qualsiasi pagina del sito, a condizione che la sessione sia attiva.
Indice
Sintassi di $_SESSION in PHP:
Prima di utilizzare $_SESSION è necessario avviare la sessione con la funzione session_start();
session_start();
Per impostare un valore di sessione:
$_SESSION['nome_chiave'] = valore;
Per recuperare un valore di sessione:
$valore = $_SESSION['nome_chiave'];
Per eliminare un valore di sessione:
unset($_SESSION['nome_chiave']);
Esempio dell'utilizzo di $_SESSION in PHP
In questo esempio creiamo una pagina HTML contenente un modulo con delle opzioni di colore. Quando l'utente seleziona una delle opzioni e fa clic su "Invia preferenza", viene inviato un POST al file sessioni.php. Il codice PHP nel file sessioni.php inizia la sessione e controlla se è stato inviato un POST con il nome "preferenza". Se è così, stampa "submit avvenuto..." e salva la preferenza dell'utente nella variabile di sessione $_SESSION['preferenzacolori'].
<?php
session_start();
if(isset($_POST['preferenza'])){
echo 'submit avvenuto...';
$_SESSION['preferenzacolori'] = $_POST['colore'];
};
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sessioni</title>
</head>
<body>
<a href="pagina-2.php">Pagina 2</a>
<form action="sessioni.php" method="post">
<label for="colore">Quale colore preferisci?</label><br>
<input type="radio" name="colore" value="rosso">Rosso<br>
<input type="radio" name="colore" value="rosso">Blu<br>
<input type="radio" name="colore" value="verde">Verde<br>
<input type="radio" name="colore" value="giallo">Giallo<br>
<input type="submit" name ="preferenza" value="Invia preferenza">
</form>
</body>
</html>
Passiamo ora ad un altra pagina (pagina-2.php) dove controlleremo se il valore relativo a $_SESSION['preferenzacolori'] è stato salvato:
<?php
session_start();
echo $_SESSION['preferenzacolori'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Seconda pagina</title>
</head>
<body>
<button onclick="history.back()">Go Back</button>
</body>
</html>
Come possiamo vedere, in questo esempio, l'informazione è stata salavata e successivamente recuperata in un altra pagina.
Affinché questo avvenga, le informazioni relative alle sessioni vengono memorizzate sul server in dei file che possiamo "scoprire" tramite l'invocazione della funzione session_save_path() e possiamo capire il nome del file tramite l'id univoco di sessione tramite l'invocazione della funzione session_id().
<?php
session_start();
echo session_id() . '<br>';
echo session_save_path(); exit;
echo $_SESSION['preferenzacolori'];
?>
La domanda successiva è: Come fa il server a sapere in quale file leggere le informazione, dato che sicuramente ci saranno più file di sessioni, ogni file relativo ad un client? La risposta ci viene data analizzando i cookie.
Lo stato delle sessioni
Lo stato di una sessione indica se una sessione è attiva o inattiva per un utente specifico. Una sessione è attiva quando un utente ha iniziato una sessione sul sito web e il server ha creato un ID di sessione univoco per l'utente. Durante la navigazione del sito, l'ID di sessione viene utilizzato per identificare l'utente e recuperare i valori di sessione associati.
Per conoscere lo status di una sessione possiamo utilizzare la funzione session_status()
<?php
// stato della sessione
session_start();
$statoSessione = session_status();
if($statoSessione === PHP_SESSION_NONE) { // valore 1: sessione non attiva
echo "Sessione non attiva";
} else if($statoSessione === PHP_SESSION_ACTIVE) { // valore 2: sessione attiva
echo "Sessione Attiva";
}
?>