In questo articolo si descrive quello che è una sessione, come crearla, utilizzarla e distruggerla in PHP. Si spiega anche un paio di consigli per garantirne la sicurezza.
$_SESSION
⤽
$_SESSION è un array c le informazioni da tutte le pagine richieste che un utente fa durante la sua visita a un sito o da un’applicazione web. Un modo fondamentale per spiegare cos’è una sessione è come è immaginando il seguente scenario:Quando si lavora con un’applicazione, la si apre, si apportano alcune modifiche, e poi la si chiude.
Questo è il compito della sessione nella sua forma più semplice.
Lo scenario di esempio ricorda il processo che avviene quando si utilizza un sistema di login. Il processo può essere estremamente complicato o incredibilmente semplice, fino a quando c’è un valore che persiste tra le richieste. Le informazioni memorizzate nella sessione possono essere recuperate in qualsiasi momento mentre la sessione è aperta.
Anche se ci sono molti utenti che accedono al sito allo stesso tempo, ognuno di loro avrà la sua propria sessione e grazie agli ID univoci assegnati e gestiti da PHP, ogni sessione permette a ciascun utente di avere a dispozione le informazioni solo a se stesso. Le informazioni di sessione vengono memorizzati sul server anziché sul computer dell’utente (così come vengono memorizzati dai cookies), il che rende le sessioni più sicure dei cookies tradizionali per passare informazioni tra le pagine richieste.
Usando le sessioni
⤽
Prima di poter memorizzare le informazioni in una sessione è necessario avviare il gestore di sessioni di PHP. Questo viene fatto all’inizio del vostro codice PHP, e deve essere fatto prima di qualsiasi testo, HTML o JavaScript che venga inviato al browser. Per avviare la sessione, si chiama la funzione session_start() all’inizio del file:
Nel tuo secondo file, si chiama
Questo esempio è una dimostrazione di base che spiega come archiviare e di recuperare i dati in una sessione. Nel primo script, il valore “Pippo” è stato associato alla chiave “username” nell’array
Finalizzare una sessione
Copia codice
<?php
// partenza del motore!
session_start();
// dati della sessione
$_SESSION["username"] = "Pippo";
?>
session_start() inizia la sessione tra l’utente e il server, e permette di memorizzare i valori nella variabile $_SESSION per essere accessibile da altri script in seguito.Nel tuo secondo file, si chiama
session_start() ancora una volta e la sessione continua; quindi è possibile recuperare i valori da $_SESSION.
Copia codice
<?php
// continua la sessione
session_start();
// recupera i dati della sessione
echo "Username = " . $_SESSION["username"];
?>
$_SESSION. Nel secondo script, si recupera l’informazione che è stata richiesta indietro attraverso l’array $_SESSION dalla sua chiave associativa. $_SESSION consente di archiviare e recuperare le informazioni attraverso le richieste di pagine di sessione nella navigazione attiva di un utente.⤽
È così importante come lo è quello di iniziare una sessione. Anche se una sessione è solo un modo per memorizzare temporaneamente i dati, è molto importante pulire tutto dopo il suo uso in modo da garantire la massima sicurezza quando si tratta di informazioni potenzialmente sensibili. È anche una buona pratica per evitare di avere una quantità enorme di dati di sessione sul server.
Per eliminare un singolo valore di sessione utilizzare la funzione
Per eliminare tutti i valori di sessione, è possibile utilizzare la funzione
Entrambi gli esempi riguardano solo i dati memorizzati nella sessione, non la sessione stessa. È ancora possibile memorizzare altri valori nella variabile
Per eliminare un singolo valore di sessione utilizzare la funzione
unset():
Copia codice
<?php
session_start();
// eliminare il valore di username
unset($_SESSION["username"]);
?>
session_unset():
Copia codice
<?php
session_start();
// eliminare tutti i valori della sessione
session_unset();
?>
$_SESSION dopo averlo chiamato. Se si desidera interrompere completamente la sessione, per esempio quando un utente si disconnette, si utilizza la funzione session_destroy().
Copia codice
<?php
session_start();
// termina al sessione
session_destroy();
?>
È consigliato che quando si è sicuri che non è più necessaria la sessione di distruggerla utilizzando la funzione
session_destroy(), piuttosto che eliminare solo i suoi valori con la funzione session_unset(). Se si eliminano solo i valori, la stessa sessione è ancora attiva ed è possibile iniettare del codice malizioso in quelle sessioni con dei valori manipolati.Sono queste le sessioni in poche parole e la sua la funzionalità è molto semplice ma molto potente all’interno di PHP, che fornisce un’elegante soluzione al problema del passaggio dei dati tra le pagine web.
Time-Outs delle sessioni
⤽
Il timing-out delle sessioni è un’azione molto importante se si ha a che fare con utenti collegati al sito web o ad una applicazione. Se un utente accede a un sito da un internet café e poi lascia il computer e il locale senza aver fatto il log out dell’accesso che ha fatto al sito web, come si fa a bloccare l’utente successivo se su quello stesso computer continua ad avere l’accesso alla sessione dell’utente precedente? Si può usare, per esempio, il seguente codice:
Il codice garantisce che se non vi è alcuna attività per più di 600 secondi (10 minuti), la richiesta viene allora reindirizzata alla pagina di logout che sarebbe il logout volontario dell’utente.
Rigenerare l'ID della sessione
Copia codice
<?php
session_start();
// configura il periodo di time-out in secondi
$inactive = 600;
// controlla se la variabile $_SESSION["timeout"]
// è presente
if (isset($_SESSION["timeout"])) {
// calcolare il "tempo di vita" della sessione
$sessionTTL = time() - $_SESSION["timeout"];
if ($sessionTTL > $inactive) {
session_destroy();
header("Location: /logout.php");
}
}
$_SESSION["timeout"] = time();
?>
⤽
La funzione
Distruzione delle sessionisession_regenerate_id() crea un nuovo e unico ID per rappresentare la sessione dell’utente corrente. Questo dovrebbe essere rigenerato al momento che ogni azione importante di autenticazione venga eseguita, come il log-in o l’aggiornamento dei dati del profilo utente. Dare alle sessioni un nuovo ID dopo tali azioni rende l’applicazione più sicura, riducendo il rischio di un attacco specifico conosciuto come “Session Hijacking“.
Copia codice
<?php
session_start();
if ($_POST["username"] == "admin" && $_POST["password"] == sha1("password")) {
$_SESSION["authorized"] = true;
session_regenerate_id();
}
?>
⤽
Come ho accennato in precedenza, si dovrebbe utilizzare la funzione
Utilizzare l'archiviazione permanente
session_destory() una volta che non si ha più bisogno di utilizzare la sessione. Questo impedisce agli aggressori di dirottare la sessione in stallo e aumenta la sicurezza della relativa sessione del sito web.Utilizzare l'archiviazione permanente
Utilizzare un database per memorizzare i dati al primo momento che si sa che i dati incominciano a essere persistenti: non lasciare per troppo tempo la sessione aperta perché sono fonti di possibili attacchi. I dati che dovrebbero essere conservati nella variabile
$_SESSION, sono quelle i cui dati di sessione sono destinate ad essere transitorie.
Ancora nessun commento