Come utilizzare le sessioni e le variabili di sessione in PHP

La gestione delle sessioni è un concetto chiave in PHP che consente di mantenere le informazioni dell'utente su tutte le pagine di un sito Web o di un'app. In questo post, imparerai le basi della gestione delle sessioni in PHP. 

Inizieremo con una spiegazione di come funzionano le sessioni e in che modo sono correlate ai cookie. Quindi esamineremo alcuni frammenti di codice che dimostrano come lavorare con le sessioni. Imparerai come creare e distruggere sessioni e come modificare le variabili di sessione.

Cos'è una sessione in PHP?

Una sessione è un meccanismo per mantenere le informazioni tra le diverse pagine Web per identificare gli utenti mentre navigano su un sito o un'app. Ti stai chiedendo perché sono necessarie sessioni per un sito web? Per capire perché le sessioni sono necessarie, dobbiamo tornare indietro e vedere come funziona il protocollo HTTP.

Il protocollo HTTP è un protocollo stateless, il che significa che in nessun modo un server può ricordare un utente specifico tra più richieste. Ad esempio, quando si accede a una pagina Web, il server è solo responsabile della fornitura del contenuto della pagina richiesta. Pertanto, quando si accede ad altre pagine dello stesso sito Web, il server Web interpreta ogni singola richiesta separatamente, come se non fossero correlate l'una con l'altra. Non c'è modo per il server di sapere che ogni richiesta proviene dallo stesso utente.

Il seguente diagramma descrive il protocollo HTTP in poche parole.

In questo modello, se si desidera visualizzare informazioni specifiche dell'utente, è necessario autenticare un utente in ogni richiesta. Immagina se dovessi digitare il tuo nome utente e password su ogni pagina che mostra le informazioni del tuo profilo! Sì, sarebbe ingombrante e non pratico affatto, ed è qui che le sessioni entrano in scena.

Una sessione ti consente di condividere informazioni tra le diverse pagine di un singolo sito o app, quindi aiuta a mantenere lo stato. Ciò consente al server di sapere che tutte le richieste provengono dallo stesso utente, consentendo così al sito di visualizzare le informazioni e le preferenze specifiche dell'utente.

Flusso di accesso con sessioni e cookie

Passiamo rapidamente attraverso un flusso di accesso comune per un sito web per capire cosa succede dietro le quinte.

  1. Un utente apre la pagina di accesso di un sito Web.
  2. Dopo aver inviato il modulo di accesso, un server dall'altra parte autentica la richiesta convalidando le credenziali immesse.
  3. Se le credenziali immesse dall'utente sono valide, il server crea una nuova sessione. Il server genera un numero casuale univoco, chiamato ID di sessione. Crea anche un nuovo file sul server che viene utilizzato per memorizzare le informazioni specifiche della sessione.
  4. Successivamente, un ID di sessione viene passato all'utente, insieme a qualsiasi altra risorsa richiesta. Dietro le quinte, questo ID di sessione viene inviato nel PHPSESSID cookie nell'intestazione della risposta.
  5. Quando il browser riceve la risposta dal server, incontra il PHPSESSID intestazione del cookie. Se i cookie sono consentiti dal browser, salverà questo PHPSESSID cookie, che memorizza l'ID di sessione passato dal server.
  6. Per le richieste successive, il PHPSESSID il cookie viene restituito al server. Quando il server incontra il PHPSESSID cookie, proverà a inizializzare una sessione con quell'ID di sessione. Lo fa caricando il file di sessione che è stato creato in precedenza durante l'inizializzazione della sessione. Inizializzerà quindi la variabile dell'array super-globale $ _SESSION con i dati memorizzati nel file di sessione.

In questo modo, i dati dell'utente vengono conservati su più richieste e l'utente viene registrato durante una sessione.

Il seguente diagramma mostra come il protocollo HTTP funziona con le sessioni.

Ora che hai visto una breve introduzione su come funzionano le sessioni, creeremo alcuni esempi pratici per dimostrare come creare e manipolare le variabili di sessione.

Come avviare una sessione

In questa sezione, discuteremo come avviare una sessione in PHP.

Ogni volta che vuoi gestire le variabili di sessione, devi assicurarti che una sessione sia già iniziata. Ci sono un paio di modi in cui puoi iniziare una sessione in PHP.

Utilizzare il session_start Funzione

Questo è il metodo che vedrai più spesso, dove una sessione viene avviata dal session_start funzione.

L'importante è che il session_start la funzione deve essere richiamata all'inizio dello script, prima che qualsiasi output venga inviato al browser. Altrimenti incontrerai il famigerato Le intestazioni sono già state inviate errore.

Avvia automaticamente una sessione

Se è necessario utilizzare sessioni durante l'applicazione, è anche possibile attivare l'avvio automatico di una sessione senza utilizzare session_start funzione.

C'è un'opzione di configurazione in php.ini file che consente di avviare automaticamente una sessione per ogni richiesta-session.auto_start. Per impostazione predefinita, è impostato su 0, e puoi impostarlo 1 per abilitare la funzionalità di avvio automatico.

session.auto_start = 1

D'altra parte, se non si ha accesso a php.ini file, e stai usando il server web Apache, potresti anche impostare questa variabile usando il .htaccess file.

php_value session.auto_start 1

Se si aggiunge la riga sopra nel .htaccess file, che dovrebbe avviare automaticamente una sessione nella tua applicazione PHP.

Come ottenere un ID sessione

Come discusso in precedenza, il server crea un numero univoco per ogni nuova sessione. Se si desidera ottenere un id di sessione, è possibile utilizzare il session_id funzione, come mostrato nel seguente frammento.

Questo dovrebbe darti l'id della sessione corrente. Il session_id la funzione è interessante in quanto può anche assumere un argomento: un ID di sessione. Se si desidera sostituire l'id di sessione generata dal sistema con il proprio, è possibile fornirlo al primo argomento di session_id funzione.

È importante notare che il session_id la funzione deve essere posizionata prima del session_start chiamare quando si desidera avviare una sessione con un ID di sessione personalizzato.

Come creare variabili di sessione

In questa sezione, esploreremo come inizializzare le variabili di sessione in PHP.

Come abbiamo discusso in precedenza, una volta avviata una sessione, il $ _SESSION l'array super-globale viene inizializzato con le informazioni sulla sessione corrispondenti. Per impostazione predefinita, è inizializzato con una matrice vuota ed è possibile memorizzare ulteriori informazioni utilizzando una coppia chiave-valore.

Esaminiamo il seguente script di esempio che mostra come inizializzare le variabili di sessione.

Come puoi vedere, abbiamo iniziato una sessione all'inizio dello script usando il session_start funzione. In seguito, abbiamo inizializzato un paio di variabili di sessione. Infine, abbiamo accesso a quelle variabili usando il $ _SESSION super-global.

Quando si memorizzano i dati in una sessione usando il $ _SESSION super-globale, viene infine memorizzato in un file di sessione corrispondente sul server che è stato creato all'avvio della sessione. In questo modo, i dati della sessione vengono condivisi tra più richieste.

Come abbiamo discusso, le informazioni sulla sessione sono condivise tra le richieste e quindi è possibile accedere alle variabili di sessione inizializzate su una pagina anche da altre pagine, fino alla scadenza della sessione. In genere, una sessione scade quando il browser viene chiuso.

Come modificare ed eliminare le variabili di sessione

È possibile modificare o eliminare le variabili di sessione create precedentemente nell'applicazione allo stesso modo delle variabili PHP regolari.

Vediamo come modificare le variabili di sessione.

Nello script sopra, abbiamo controllato se il $ _SESSION [ 'count'] la variabile è impostata in primo luogo. Se non è impostato, lo imposteremo su 1, altrimenti lo incrementeremo di 1. Quindi, se aggiorni questa pagina più volte, dovresti vedere che il contatore viene incrementato di uno ogni volta! 

D'altra parte, se si desidera eliminare una variabile di sessione, è possibile utilizzare il unset funzione, come mostrato nel seguente frammento.

Pertanto, non è più possibile accedere al $ _SESSION [ 'logged_in_user_id'] variabile come è cancellata dal unset funzione. Ecco come puoi modificare le informazioni sulla sessione.

Come distruggere una sessione

In questa sezione, vedremo come potresti distruggere una sessione. Nella sezione precedente, abbiamo discusso il unset funzione, che viene utilizzata se si desidera eliminare specifiche variabili di sessione. D'altra parte, se si desidera eliminare tutti i dati relativi alla sessione contemporaneamente, è possibile utilizzare il comando session_destroy funzione.

Proviamo a capire come funziona usando il seguente esempio.

Il session_destroy la funzione cancella tutto ciò che è memorizzato nella sessione corrente. Quindi, vedrai uno spazio vuoto $ _SESSION variabile dalle richieste successive in quanto i dati della sessione memorizzati sul disco sono stati cancellati dal session_destroy funzione.

Generalmente, useresti il session_destroy funzione quando l'utente viene disconnesso.

Conclusione

In questo articolo, abbiamo esplorato le basi della gestione delle sessioni in PHP. È un concetto chiave che ti consente di conservare le informazioni attraverso le pagine web.

Nella prima metà dell'articolo, abbiamo discusso i concetti di base delle sessioni e in seguito abbiamo creato alcuni esempi di PHP per dimostrare come è possibile creare e distruggere sessioni e manipolare le variabili di sessione.