Le sessioni sono un meccanismo che ci permette di associare un insieme di dati ad un utente e di mantenerli attraverso la navigazione del nostro sito.
Per spiegare meglio questo concetto pensiamo a tutti quei siti che ci richiedono un login per accedere ad un'area riservata. Al primo accesso ci viene chiesto di inserire le nostre credenziali e una volta verificata la loro correttezza noi possiamo tranquillamente accedere a qualsiasi pagina.
Per far si che ad ogni cambio pagina non ci venga chiesto nuovamente di insrire le credenziali per autenticarci il sistema salverà una o più variabili nella nostra sessione le quali gli comunicheranno ai successivi accessi che noi abbiamo già effettuato il login.
Per fare questo PHP ogni volta che si richiede l'inizio di una nuova sessione assegna ad ogni utente un identificativo univoco chiamato id di sessione e questo viene salvato o in un cookie sul pc dell'utente o trasmesso di pagina in pagina tramite URL.
Se la sessione è basata sui cookie (metodo più sicuro per evitare il session hijacking!) la chiamata session_start(); dovrà essere fatta all'inizio di ogni pagina prima di ogni output al browser, il che significa che alla riga 1 del nostro editor dovremmo avere il tag di apertura di php Per attivare una sessione deve chiamare la funzione session_start(); oppure PHP lo farà automaticamente se in php.ini la direttiva session.auto_start è impostata a 1.
Quando l'utente passerà da una pagina all'altra e verrà richiamata nuovamente session_start(); PHP troverà che l'utente ha già un id di sessione assegnato e ricreerà l'ambiente di sessione precedentemente creato, quindi session_start(); ha la duplice funzione di inizializzare nuove sessioni se l'utente non ha un id assegnato e in caso contrario di recuperare i dati delle sessioni precedenti.
Al termine di ogni script (leggi pagina per i meno esperti) la sessione viene serializzata, cioè convertita in una stringa e salvata in un file che si chiamerà sess_{ id_di_sessione }, dove sess è un prefisso standar che viene impostato in php.ini mentre id_di_sessione è l'id di ogni utente (che è composto da una stringa alfanumerica di 32 caratteri).
Ora che abbiamo chiarito cos'è una sessione e come funziona vediamo di capire come ci può aiutare. Innanzitutto quando viene inizializzata viene creata un'array globale che si chiama $_SESSION (o $HTTP_SESSION_VARS con versioni di PHP <= 4.0.6) che conterrà tutti i nostri dati.
Ora aiutandoci con l'esempio di prima vediamo di capire come usare la sessione per creare un login.
Supponiamo che il nostro utente abbia le seguenti credenziali username: "utente" e password: "pwd" e supponiamo che i due dati ci arrivino da una form con method="POST" e che si chiamino rispettivamente "user" e "pass".
Il nostro script di autenticazione inizierà così:
In questo modo ho salvato in sessione 2 valori che mi dicono che l'utente si è autenticato e chi è, a questo punto gli script che controllano le aree riservate dovranno semplicemente avere un controllo di questo tipo:
La durata di una sessione è data dalla direttiva di php.ini session.gc_maxlifetime che per default è impostata a 1440 secondi (24 minuti), dopo di che il file dove viene serializzato l'array di sessione viene segnato come garbage (spazzatura) e la nostra sessione si può considerare come distrutta, ovviamente questo avviene se l'utente non naviga per più di 24 minuti nel nostro sito perchè ad ogni caricamento di pagina e quindi chiamata di session_start(); il timer che determina la scadenza della sessione viene resettato.
Per spiegare meglio questo concetto pensiamo a tutti quei siti che ci richiedono un login per accedere ad un'area riservata. Al primo accesso ci viene chiesto di inserire le nostre credenziali e una volta verificata la loro correttezza noi possiamo tranquillamente accedere a qualsiasi pagina.
Per far si che ad ogni cambio pagina non ci venga chiesto nuovamente di insrire le credenziali per autenticarci il sistema salverà una o più variabili nella nostra sessione le quali gli comunicheranno ai successivi accessi che noi abbiamo già effettuato il login.
Per fare questo PHP ogni volta che si richiede l'inizio di una nuova sessione assegna ad ogni utente un identificativo univoco chiamato id di sessione e questo viene salvato o in un cookie sul pc dell'utente o trasmesso di pagina in pagina tramite URL.
Se la sessione è basata sui cookie (metodo più sicuro per evitare il session hijacking!) la chiamata session_start(); dovrà essere fatta all'inizio di ogni pagina prima di ogni output al browser, il che significa che alla riga 1 del nostro editor dovremmo avere il tag di apertura di php Per attivare una sessione deve chiamare la funzione session_start(); oppure PHP lo farà automaticamente se in php.ini la direttiva session.auto_start è impostata a 1.
Quando l'utente passerà da una pagina all'altra e verrà richiamata nuovamente session_start(); PHP troverà che l'utente ha già un id di sessione assegnato e ricreerà l'ambiente di sessione precedentemente creato, quindi session_start(); ha la duplice funzione di inizializzare nuove sessioni se l'utente non ha un id assegnato e in caso contrario di recuperare i dati delle sessioni precedenti.
Al termine di ogni script (leggi pagina per i meno esperti) la sessione viene serializzata, cioè convertita in una stringa e salvata in un file che si chiamerà sess_{ id_di_sessione }, dove sess è un prefisso standar che viene impostato in php.ini mentre id_di_sessione è l'id di ogni utente (che è composto da una stringa alfanumerica di 32 caratteri).
Ora che abbiamo chiarito cos'è una sessione e come funziona vediamo di capire come ci può aiutare. Innanzitutto quando viene inizializzata viene creata un'array globale che si chiama $_SESSION (o $HTTP_SESSION_VARS con versioni di PHP <= 4.0.6) che conterrà tutti i nostri dati.
Ora aiutandoci con l'esempio di prima vediamo di capire come usare la sessione per creare un login.
Supponiamo che il nostro utente abbia le seguenti credenziali username: "utente" e password: "pwd" e supponiamo che i due dati ci arrivino da una form con method="POST" e che si chiamino rispettivamente "user" e "pass".
Il nostro script di autenticazione inizierà così:
<?php
session_start(); // inizializzo la sessione
if(isset($_POST['user']) && $_POST['user']=="utente" && isset($_POST['pass']) && $_POST['pass']=="pwd"){
$_SESSION['utente_valido'] = true; //salvo un primo valore che mi dice che l'utente è loggato
$_SESSION['nome_utente'] = $_POST['utente']; // e il secondo è il nome utente
} else {
// lo rimando alla pagina di login
}
//resto del codice
?>
session_start(); // inizializzo la sessione
if(isset($_POST['user']) && $_POST['user']=="utente" && isset($_POST['pass']) && $_POST['pass']=="pwd"){
$_SESSION['utente_valido'] = true; //salvo un primo valore che mi dice che l'utente è loggato
$_SESSION['nome_utente'] = $_POST['utente']; // e il secondo è il nome utente
} else {
// lo rimando alla pagina di login
}
//resto del codice
?>
In questo modo ho salvato in sessione 2 valori che mi dicono che l'utente si è autenticato e chi è, a questo punto gli script che controllano le aree riservate dovranno semplicemente avere un controllo di questo tipo:
<?php
session_start(); // non dimentichiamocelo mai
if(isset($_SESSION['utente_valido']) && $_SESSION['utente_valido']===true){
echo "Benvenuto ".$_SESSION['nome_utente'];
} else {
// lo rimando alla pagina di login
}
...
?>
session_start(); // non dimentichiamocelo mai
if(isset($_SESSION['utente_valido']) && $_SESSION['utente_valido']===true){
echo "Benvenuto ".$_SESSION['nome_utente'];
} else {
// lo rimando alla pagina di login
}
...
?>
La durata di una sessione è data dalla direttiva di php.ini session.gc_maxlifetime che per default è impostata a 1440 secondi (24 minuti), dopo di che il file dove viene serializzato l'array di sessione viene segnato come garbage (spazzatura) e la nostra sessione si può considerare come distrutta, ovviamente questo avviene se l'utente non naviga per più di 24 minuti nel nostro sito perchè ad ogni caricamento di pagina e quindi chiamata di session_start(); il timer che determina la scadenza della sessione viene resettato.
Ritorna alla pagina Articoli


Home










