Come lavorare con i dati di sessione in CodeIgniter

Come sviluppatore di CodeIgniter, è davvero importante per te capire come lavorare con la libreria delle sessioni di base. Certo, puoi sempre usare l'impostazione predefinita $ _SESSION sintassi, ma è sempre consigliato l'uso del wrapper.

A partire da come caricare una libreria di sessioni, passeremo alla discussione su come aggiungere, recuperare, rimuovere e distruggere le variabili di sessione. Nell'ultimo segmento, daremo un'occhiata ai diversi driver di sessione incorporati a disposizione forniti dallo stesso framework CodeIgniter.

Come caricare una libreria di sessione

Se vuoi lavorare con le sessioni in CodeIgniter, la prima cosa di cui hai bisogno è una libreria di sessioni integrata. A meno che e fino a quando non si sviluppi un'applicazione Web che non richiede alcuna sessione, non bisogna preoccuparsi della libreria di sessione. Mentre non è il caso per la maggior parte del tempo, puoi caricare automaticamente la libreria di sessione in CodeIgniter in modo che abiliti le funzionalità di gestione delle sessioni per ogni richiesta web.

Vai avanti e apri il file situato in application / config / autoload.php. Trova la seguente sezione.

/ * | -------------------------------------------------- ----------------- | Librerie di caricamento automatico | -------------------------------------------------- ----------------- | Queste sono le classi situate in system / library / o your | directory / librerie / directory, con l'aggiunta di | libreria 'database', che è un po 'un caso speciale. | | Prototipo: | | $ autoload ['libraries'] = array ('database', 'email', 'sessione'); | | È anche possibile fornire un nome di libreria alternativo da assegnare | nel controller: | | $ autoload ['libraries'] = array ('user_agent' => 'ua'); * / $ autoload ['libraries'] = array ();

Il $ Autoload [ 'biblioteche'] array contiene l'elenco di librerie che devono essere caricate automaticamente. Secondo il nostro requisito, cambiamo per assomigliare a questo:

$ autoload ['libraries'] = array ('sessione');

Inoltre, c'è un altro modo per ottenerlo. È possibile utilizzare il codice seguente da qualche parte nel file del controller per caricare la libreria della sessione.

$ This-> load-> library ( 'sessione');

Questo è più o meno per quanto riguarda l'inizializzazione della libreria di sessione.

Nelle prossime due sezioni, esamineremo le diverse operazioni che è possibile eseguire con la libreria di sessioni di base. Per dimostrarlo, costruiremo un file di controller di esempio che carica la libreria di sessione e fornisce metodi che saranno discussi in questo articolo.

Vai avanti e crea un file application / controller / example.php con i seguenti contenuti.

load-> library ( 'sessione'); // carica url helper $ this-> load-> helper ('url');  public function index () / **** SET SESSION DATA **** / // imposta un singolo elemento nella sessione $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com') ; // imposta una serie di elementi nella sessione $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'interessi' => array ('tennis', 'viaggio')); $ This-> session-> set_userdata ($ arraydata); / **** OTTIENI DATI SESSIONE **** / // recupera dati dalla sessione echo "Sito Web preferito:". $ This-> session-> userdata ( 'favourite_website'); eco "
"; echo" Nome autore: ". $ this-> session-> userdata ('author_name'); echo"
"; echo" Interesse (Esempio di matrice): ". $ this-> session-> userdata ('interests') [0]; echo"
"; // trova tutto nella sessione in una sola volta echo '
'; print_r ($ this-> session-> datiutente ()); / **** RIMUOVERE I DATI DELLA SESSIONE **** / // annullare la chiave specifica dalla sessione $ this-> session-> unset_userdata ('favourite_website'); // disinstalla più elementi contemporaneamente $ keys = array ('twitter_id', 'interests'); $ This-> session-> unset_userdata ($ chiavi); eco '
'; print_r ($ this-> session-> datiutente ());  public function setflash () // imposta dati flash $ this-> session-> set_flashdata ('flash_welcome', 'Hey, benvenuto nel sito!'); // contrassegna i dati esistenti come dati flash $ this-> session-> set_userdata ('flash_message', 'I am flash message!'); $ This-> session-> mark_as_flash ( 'flash_message'); reindirizzare ( 'esempio / getflash');  public function getflash () // get flash data echo "Messaggio di benvenuto flash:". $ This-> session-> flashdata ( 'flash_welcome'); eco '
'; print_r ($ this-> session-> flashdata ());  public function tempdata () // imposta i dati temporanei $ this-> session-> set_tempdata ('coupon_code', 'XYEceQ!', 300); // contrassegna i dati esistenti come dati temporanei $ this-> session-> set_userdata ('coupon_code', 'XYEceQ!'); $ this-> session-> mark_as_temp ('coupon_code', 300); // recupera i dati temporanei echo $ this-> session-> tempdata ('coupon_code');  public function destroy () $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // sessione destory $ this-> session-> sess_destroy (); 

Questo è un file di controller di base che dovrebbe essere familiare come sviluppatore di CodeIgniter. Ora siamo pronti per passare alle prossime due sezioni che forniscono informazioni sui concetti di gestione delle sessioni.

Come aggiungere, recuperare e rimuovere i dati della sessione

Per cominciare, prendiamo il codice del nostro __costruire metodo.

funzione pubblica __construct () parent :: __ construct (); // load Session Library $ this-> load-> library ('session'); // carica url helper $ this-> load-> helper ('url'); 

Nel caso in cui non hai caricato automaticamente la libreria di sessione, lo farà in primo luogo. Oltre a questo, abbiamo anche caricato il url aiutante che ci consente di utilizzare determinati metodi di utilità che vedremo in seguito.

Quindi, prendi il codice di indice metodo.

indice di funzione pubblica () / **** SET SESSION DATA **** / // imposta un singolo elemento nella sessione $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // imposta una serie di elementi nella sessione $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'interessi' => array ('tennis', 'viaggio')); $ This-> session-> set_userdata ($ arraydata); / **** OTTIENI DATI SESSIONE **** / // recupera dati dalla sessione echo "Sito Web preferito:". $ This-> session-> userdata ( 'favourite_website'); eco "
"; echo" Nome autore: ". $ this-> session-> userdata ('author_name'); echo"
"; echo" Interesse (Esempio di matrice): ". $ this-> session-> userdata ('interests') [0]; echo"
"; // trova tutto nella sessione in una sola volta echo '
'; print_r ($ this-> session-> datiutente ()); / **** RIMUOVERE I DATI DELLA SESSIONE **** / // annullare la chiave specifica dalla sessione $ this-> session-> unset_userdata ('favourite_website'); // disinstalla più elementi contemporaneamente $ keys = array ('twitter_id', 'interests'); $ This-> session-> unset_userdata ($ chiavi); eco '
'; print_r ($ this-> session-> datiutente ()); 

Come hai già caricato la libreria della sessione, puoi usare $ This-> sessione per accedere all'oggetto di sessione e accedere ai metodi che sono supportati. Il set_userdata il metodo viene utilizzato per creare una nuova variabile di sessione e generalmente richiede due argomenti: chiave e valore.

$ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com');

Puoi anche usare il set_userdata metodo per creare più variabili in una singola chiamata. In tal caso, devi solo fornire un argomento, e dovrebbe essere un array come mostrato di seguito.

// imposta una serie di elementi nella sessione $ arraydata = array ('author_name' => 'Sajal Soni', 'website' => 'http://code.tutsplus.com', 'twitter_id' => '@sajalsoni', 'interessi' => array ('tennis', 'viaggio')); $ This-> session-> set_userdata ($ arraydata);

Gli utenti con gli occhi acuti avrebbero notato che si poteva anche assegnare un array come valore di qualsiasi variabile di sessione, come mostrato sopra interessi esempio.

Ora, vediamo come recuperare il valore di qualsiasi variabile di sessione. Il dati utente il metodo viene utilizzato per recuperare il valore di qualsiasi variabile di sessione e in genere richiede la chiave della variabile di sessione che si sta cercando come primo argomento.

echo "Sito Web preferito:". $ This-> session-> userdata ( 'favourite_website');

Se stai cercando una delle voci dell'array, puoi usare quanto segue:

echo "Interesse (Esempio di matrice):". $ This-> session-> userdata ( 'interessi') [0];

Più spesso, vuoi sapere quante variabili in totale sono memorizzate in una sessione attiva a scopo di debug, e puoi farlo anche tu.

// scarica tutto nella sessione in una sola volta echo '
'; print_r ($ this-> session-> datiutente ());

Sì, lo stesso dati utente il metodo viene in nostro soccorso! Se non si passa alcun argomento al dati utente metodo, restituirà tutte le variabili di sessione.

Infine, vediamo come è possibile rimuovere le variabili dalla sessione. È il unset_userdata metodo che è possibile utilizzare se si desidera rimuovere le voci di sessione.

// annulla la chiave specifica dalla sessione $ this-> session-> unset_userdata ('favourite_website');

Ed ecco la variazione dello stesso metodo che mostra come rimuovere più voci in un singolo passaggio.

// disinstalla più elementi contemporaneamente $ keys = array ('twitter_id', 'interests'); $ This-> session-> unset_userdata ($ chiavi);

E quello dovrebbe cancellare il twitter_id e interessi voci dalla sessione.

Vai avanti e prova il indice metodo per vedere le cose in azione.

Buoni utili: Flashdata e Tempdata

Nell'ultima sezione, abbiamo discusso le basi della gestione delle sessioni in CodeIgniter. In questa sezione, discuteremo un paio di altri metodi di utilità forniti dalla libreria di sessione.

Nello sviluppo quotidiano, spesso è necessario visualizzare i messaggi in risposta a determinate azioni dell'utente. Ad esempio, desideri visualizzare un messaggio di successo quando qualcuno pubblica un commento sul tuo sito e il messaggio dovrebbe essere visualizzato solo una volta. Il set_flashdata metodo è un candidato perfetto per questo tipo di caso d'uso.

Infatti, set_flashdata è molto simile al set_userdata metodo in quanto consente di salvare un valore in sessione. L'unica eccezione è il valore della sessione impostato da flashdata il metodo è disponibile solo per la richiesta successiva. Nelle richieste successive, non sarà più possibile accedere a queste variabili non appena sono state cancellate.

Prendi il codice del setFlash metodo.

public function setflash () // imposta dati flash $ this-> session-> set_flashdata ('flash_welcome', 'Hey, benvenuto nel sito!'); // contrassegna i dati esistenti come dati flash $ this-> session-> set_userdata ('flash_message', 'I am flash message!'); $ This-> session-> mark_as_flash ( 'flash_message'); reindirizzare ( 'esempio / getflash'); 

Puoi creare un nuovo flashdata variabile nello stesso modo in cui avresti creato una variabile di sessione regolare usando il set_userdata metodo. D'altra parte, puoi anche contrassegnare una variabile di sessione esistente come a flashdata variabile. In tal caso, è necessario utilizzare il mark_as_flash metodo, come mostrato nel codice sopra.

Infine, reindirizziamo l'utente a getflash metodo che mostra come utilizzare le variabili flashdata impostate nel file setFlash metodo. Diamo una rapida occhiata al getflash metodo.

public function getflash () // get flash data echo "Messaggio di benvenuto flash:". $ This-> session-> flashdata ( 'flash_welcome'); eco '
'; print_r ($ this-> session-> flashdata ()); 

Come previsto, c'è un flashdata metodo che consente di recuperare le variabili di sessione archiviate come dati flash. Se chiami il flashdata metodo senza argomenti, restituirà tutte le variabili flashdata simili a quelle del dati utente metodo.

Vai avanti e prova il setFlash metodo. Verrai reindirizzato all'URL getflash e vedrai il messaggio. Se aggiorni la pagina getflash, non vedrai più quel messaggio!

Successivamente, c'è un'altra variazione fornita dalla libreria di sessione in questa categoria, le variabili di sessione tempdata. Se si desidera creare variabili di sessione per un periodo di tempo specifico, il set_tempdata il metodo è quello che stai cercando.

Ad esempio, se si desidera creare una variabile di sessione che dovrebbe essere automaticamente cancellata dopo un certo periodo di tempo, è possibile utilizzare il comando set_tempdata metodo per creare tale variabile, come mostrato nel seguente metodo.

funzione pubblica tempdata () // imposta i dati temporanei $ this-> session-> set_tempdata ('coupon_code', 'XYEceQ!', 300); // contrassegna i dati esistenti come dati temporanei $ this-> session-> set_userdata ('coupon_code', 'XYEceQ!'); $ this-> session-> mark_as_temp ('coupon_code', 300); // recupera i dati temporanei echo $ this-> session-> tempdata ('coupon_code'); 

Il terzo argomento nel set_tempdata metodo indica il numero di secondi dopo i quali la variabile verrà eliminata dalla sessione.

Puoi anche contrassegnare una variabile di sessione esistente come tempdata usando il mark_as_temp metodo a condizione che tu abbia già creato una variabile di sessione usando il set_userdata metodo.

Infine, puoi usare il TempData metodo per recuperare il valore di qualsiasi variabile tempdata.

Quindi è bello avere a disposizione questi metodi di utilità nel ciclo di vita quotidiano dello sviluppo!

Cosa non dovresti dimenticare: Session Destroy

Distruggere la sessione è probabilmente l'ultima cosa che vorresti fare quando l'utente si disconnette. Si assicura che le variabili di sessione impostate fino ad ora vengano eliminate dalla sessione attiva e non siano più disponibili per le richieste successive.

Inseriamo il codice del distruggere metodo e farlo.

funzione pubblica destroy () $ this-> session-> set_userdata ('favourite_website', 'http://tutsplus.com'); // distrugge la sessione $ this-> session-> sess_destroy (); 

È il sess_destroy metodo che ci aiuta a distruggere la sessione attiva. Ovviamente cancellerà anche le variabili tempdata e flashdata che sono state impostate nella sessione attiva.

Assicurati di prendere l'abitudine di distruggere una sessione una volta che non è più utile nel contesto attuale dell'utente.

Cherry on the Top: Driver di sessione

Siamo nell'ultima sezione di questo articolo, i driver di sessione. Più spesso, non ti preoccupare di configurare il driver di sessione nell'applicazione in quanto il driver di sessione predefinito, il file system, è già configurato con l'impostazione predefinita.

Quindi è il file system che contiene tutti i dati relativi alle sessioni, ed è ampiamente utilizzato ed è lo standard accettato per la gestione delle sessioni. Detto questo, CodeIgniter supporta anche altri driver di sessione che è possibile utilizzare se si desidera passare dal driver di sessione del file system predefinito.

Ecco un elenco di tutti i driver di sessione supportati in CodeIgniter:

  • File
  • Banca dati
  • Redis
  • memcached

Il driver di sessione del database, come suggerisce il nome, memorizza i dati della sessione nel database configurato per l'applicazione CodeIgniter.

D'altra parte, gli altri due driver di sessione sono meccanismi di archiviazione in memoria preferiti per i siti Web ad alte prestazioni.

Nel application / config / config.php file, è possibile configurare il driver di sessione che si desidera utilizzare nella propria applicazione.

$ config ['sess_driver'] = 'database'; $ config ['sess_save_path'] = 'custom_sessions';

Indica a CodeIgniter di utilizzare il driver di sessione del database e i dati della sessione verranno salvati in custom_sessions Tabella MySQL.

La discussione su ciascun driver di sessione va oltre lo scopo di questo articolo, ma è possibile consultare la documentazione del sito ufficiale che fornisce una guida approfondita per ciascun autista.

Conclusione

La gestione delle sessioni in CodeIgniter era l'argomento del tutorial di oggi e ne abbiamo discusso a fondo esaminando ogni aspetto della materia.

Iniziando con le operazioni di base della sessione, abbiamo analizzato anche i metodi di flashdata e tempdata e la discussione sui driver di sessione ha concluso il nostro articolo.

Come sempre, potresti gridare le tue domande e i tuoi suggerimenti usando il feed qui sotto!