Come funzionano le sessioni PHP? (non "come vengono usati?")


127

I file di sessione vengono generalmente archiviati, ad esempio, /tmp/sul server e denominati sess_{session_id}. Ho esaminato i contenuti e non riesco a capire come funzionano davvero.

È facile recuperare il nome e il contenuto della variabile dal file. Ma come fa PHP a sapere quale sessione appartiene a chi?

Il session_id sembra del tutto casuale e un indirizzo IP può avere più utenti e ogni utente può avere più sessioni se hanno più di una finestra del browser aperta.

Quindi, come funziona?


Risposte:


202

Nella situazione generale:

  • l'id della sessione viene inviato all'utente quando viene creata la sua sessione.
  • è memorizzato in un cookie (chiamato, per impostazione predefinita, PHPSESSID)
  • quel cookie viene inviato dal browser al server con ogni richiesta
  • il server (PHP) utilizza quel cookie, contenente session_id, per sapere quale file corrisponde a quell'utente.

I dati nei file delle sessioni sono il contenuto di $_SESSION, serializzato (ovvero rappresentato come una stringa - con una funzione come serializzare ) ; e non è serializzato quando il file viene caricato da PHP, per popolare l' $_SESSIONarray.


A volte, l'id di sessione non viene archiviato in un cookie, ma viene inviato anche in URL, ma al giorno d'oggi è piuttosto raro.


Per ulteriori informazioni, puoi dare un'occhiata alla sezione Gestione delle sessioni del manuale, che fornisce alcune informazioni utili.

Ad esempio, esiste una pagina sul passaggio dell'ID sessione , che spiega come l'ID sessione viene passato da una pagina all'altra, utilizzando un cookie o negli URL - e quali opzioni di configurazione influiscono su questo.


5
In che modo un dispositivo mobile (da un'app nativa) gestisce normalmente le sessioni? Memorizzare un ID sessione? O è questo che arriva OAuth?
Adam Waite,

13

Come funziona la sessione PHP

  • In primo luogo PHP crea un numero identificativo univoco lungo 16 byte (memorizzato come una stringa di 32 caratteri esadecimali, ad es. a86b10aeb5cd56434f8691799b1d9360) Per una singola sessione.

  • Il cookie PHPSESSID passa quel numero di identificazione univoco al browser degli utenti per salvare quel numero.

  • Un nuovo file viene creato sul server con lo stesso nome di numero di identificazione univoco con prefisso sess_ (es sess_a86b10aeb5cd56434f8691799b1d9360.)

  • Il browser invia quel cookie al server con ogni richiesta.

  • Se PHP ottiene quel numero di identificazione univoco dal cookie PHPSESSID (su ogni richiesta), PHP cerca nella directory temporanea e confronta quel numero con il nome del file. Se entrambi sono uguali, recupera la sessione esistente, altrimenti crea una nuova sessione per quell'utente.

Una sessione viene distrutta quando l'utente chiude il browser o lascia il sito. Il server termina anche la sessione allo scadere del periodo di tempo prestabilito della sessione. Questi sono i semplici passaggi del meccanismo che PHP sta usando per gestire la sessione. Spero che questo articolo ti aiuti a capire come funziona PHP SESSION.

Vedi questo articolo per maggiori dettagli. Come funziona la sessione PHP


Ma se, ad esempio, sono connesso a un determinato sito (ovvero: in una sessione) e apro una nuova scheda mysite.com/cart. Riceverò anche le mie informazioni sulla sessione "Ciao Joe Doe, 5 messaggi, ecco la tua lista del carrello ...". - Ma perché il browser relativo a questa scheda vuota dovrebbe inviare qualsiasi ID sessione insieme alla richiesta GET? aggiornamento rapido: Ah, ho trovato la risposta: +)
Frank Nocke,

Posso chiedere in che modo l'id di sessione può fornire sicurezza? Ad esempio, se l'utente si è bloccato, e arriva al suo profilo, che modificare il parametro url per accedere al profilo di un altro utente, come può l'ID di sessione impedirlo?
Andrewboy,

4

L'ID sessione è effettivamente casuale e viene passato in un cookie o nell'URL, a seconda della configurazione. Potresti aver già visto questo PHPSESSID = xxxx in alcuni URL, c'è anche un cookie con quel nome.


2

Le sessioni in PHP vengono avviate utilizzando la funzione session_start (). Come la funzione setcookie (), la funzione session_start () deve precedere qualsiasi HTML, comprese le righe vuote, sulla pagina. Sarà simile al seguente: <?php session_start( );?><html><head> ....... etc La funzione session_start () genera un ID sessione casuale e lo memorizza in un cookie sul computer dell'utente (queste sono le uniche informazioni sulla sessione effettivamente memorizzate sul lato client. ) Il nome predefinito per il cookie è PHPSESSID, anche se può essere modificato nei file di configurazione di PHP sul server (tuttavia la maggior parte delle società di hosting lo lascerà in pace.) Per fare riferimento all'ID di sessione nel tuo codice PHP, fai quindi riferimento al variabile $ PHPSESSID (è un nome cookie; lo ricordi dai cookie?)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.