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:

Session::set(‘username’,‘pippo’);

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