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.
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.
Passiamo rapidamente attraverso un flusso di accesso comune per un sito web per capire cosa succede dietro le quinte.
PHPSESSID
cookie nell'intestazione della risposta.PHPSESSID
intestazione del cookie. Se i cookie sono consentiti dal browser, salverà questo PHPSESSID
cookie, che memorizza l'ID di sessione passato dal server.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.
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.
session_start
FunzioneQuesto è 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.
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 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.
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.
È 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.
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.
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.