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.
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. Ilset_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 aldati 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
einteressi
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 alset_userdata
metodo in quanto consente di salvare un valore in sessione. L'unica eccezione è il valore della sessione impostato daflashdata
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 ilset_userdata
metodo. D'altra parte, puoi anche contrassegnare una variabile di sessione esistente come aflashdata
variabile. In tal caso, è necessario utilizzare ilmark_as_flash
metodo, come mostrato nel codice sopra.Infine, reindirizziamo l'utente a
getflash
metodo che mostra come utilizzare le variabili flashdata impostate nel filesetFlash
metodo. Diamo una rapida occhiata algetflash
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 ilflashdata
metodo senza argomenti, restituirà tutte le variabili flashdata simili a quelle deldati 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 ilset_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:
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.
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!