Una classe per gestire le sessioni in PHP
Eccomi qui dopo tanto tempo a riscrivere un articolo. Oggi condividerò con voi una classe scritta da me in PHP per utilizzare le sessioni in un modo più pulito. Non è una cosa indispensabile, ma penso che sia utile per scrivere del buon codice, soprattutto se si programma ad oggetti.
Tutti i metodi di questa classe saranno metodi statici. Probabilmente molti di voi sapranno già cosa sono i metodi statici, ma lo spiego lo stesso per i meno esperti. I metodi statici sono dei metodi che, diversamente dai metodi di istanza, non si riferiscono al singolo oggetto ma alla classe in generale. Ok, che ca**o significa? In poche parole se avete un metodo di istanza, dovete prima istanziare l’oggetto a partire dalla classe, mentre se avete un metodo statico non c’è bisogno di istanziare l’oggetto.
Nel nostro caso quindi, dato che la sessione è sempre una, evitiamo di istanziare un oggetto e utilizziamo dei metodi statici. Ma andiamo al dunque:
class Session { public static function isStarted(){ if(session_id() == '') { return false; } else { return true; } } }
Prima di tutto, creiamo il metodo isStarted che ci permetterà di capire se la sessione è già stata inizializzata. Non penso ci sia molto da spiegare: torna true se è inizializzata, false altrimenti.
Passiamo adesso a qualcosa di più interessante: i metodi get e set.
public static function set($key, $value){ if(Session::isStarted()) $_SESSION[$key] = $value; } public static function get($key){ if(Session::isStarted()) if(isset($_SESSION[$key])) return $_SESSION[$key]; else return null; else return null; }
Il metodo set prende come parametri key e value. Ovviamente se la sessione non è inizializzata non viene settato niente, ma vediamo come si usa. Ipotizziamo di dover settare una variabile username di sessione con un determinato valore. Scriveremo quindi:
Il metodo get invece prende come parametro solo key. Quindi se dobbiamo stampare la variabile di sessione username settata prima ci basterà scrivere:
echo Session::get('username');
Ok, ma come facciamo a inizializzare la sessione? Col metodo startSession. Vediamolo:
public static function startSession(){ if(!Session::isStarted()) session_start(); }
Semplicissimo, no? Se la sessione non è inizializzata utilizziamo la funzionesession_start di PHP. Possiamo anche migliorarla un po’, passandogli come parametro un array con i dati da salvare in sessione dopo averla inizializzata:
public static function startSession($data = false){ session_start(); if($data){ foreach($data as $key=>$value) Session::set($key,$value); } }
Esempio:
$array = array('username'=>'claudio','id'=>1); Session::startSession($array);
Ci ritroveremo quindi in sessione le variabili username e id contenenti rispettivamente “claudio” e “1″
In fine, non può mancare il metodo per distruggere la sessione: destroySession.
public static function destroySession(){ if(Session::isStarted()) session_destroy(); }
Anche per questo metodo non penso che ci sia nulla da spiegare. Vediamo in fine come sarà la nostra classe Session:
class Session{ public static function isStarted(){ if(session_id() == '') { return false; } else { return true; } } public static function startSession($data = false){ session_start(); if($data){ foreach($data as $key=>$value) Session::set($key,$value); } } public static function destroySession(){ if(Session::isStarted()) session_destroy(); } public static function set($key, $value){ if(Session::isStarted()) $_SESSION[$key] = $value; } public static function get($key){ if(Session::isStarted()) if(isset($_SESSION[$key])) return $_SESSION[$key]; else return null; else return null; } }
Spero di essere stato chiaro e che l’articolo sia stato utile! Se volete modificare la classe o riutilizzarla la trovate su GitHub al seguente URL: https://github.com/ClaudioLaBarbera/Session