Persistenza dello stato (sessioni)

Il meccanismo delle sessioni è un espediente nato per ovviare al problema della mancanza di stato del protocollo HTTP. Grazie al supporto per le sessioni (nativo dalla versione 4 del PHP) è possibile assegnare uno stato ad ogni client, cioè ad ogni utente della nostra applicazione web, e mantenerlo vivo nell'arco di più accessi.

 

 

 

Il mantenimento della sessione richiede la stretta collaborazione tra client e server. Il server si occupa della codifica delle informazioni di sessione in una forma adatta alla memorizzazione su un file o su un database (questo processo prende il nome di serializzazione), e del suo ripristino alla successiva richiesta dello stesso client. Tutte le informazioni risiedono nel server.

Il client, da parte sua, deve fornire al server le informazioni necessarie ad associare alla richiesta la sessione corrispondente. Ciò è reso possibile da un identificativo di sessione (SID, session identifier) univoco che viene generato al momento dell'avvio di una nuova sessione.

Il problema principale riguardo le sessioni è proprio la propagazione di tale identificativo che ne costituisce la caratteristica essenziale.

Le principali tecniche di propagazione della sessione sono due :

  • tramite cookies
  • tramite URL

La propagazione tramite cookies è la più semplice: grazie ad un cookie l'identificativo di sessione viene memorizzato direttamente nel browser del visitatore, diventando accedibile al PHP sotto forma di variabile globale. In questa ipotesi l'intera gestione della sessione è a carico del PHP.

Il sistema dei cookies, tuttavia, non è sufficientemente affidabile; il visitatore, infatti, potrebbe aver configurato il proprio browser in modo da rifiutare i cookies , rendendo impraticabile tale approccio. Per poter sfruttare le sessioni anche in situazioni del genere è necessario, allora, ricorrere alla seconda tecnica, quella della propagazione tramite URL.

La propagazione tramite URL è del tutto identica al passaggio di parametri con il metodo GET

per attuarla è necessario modificare i links alle varie pagine PHP in modo che contengano, nella parte di query string, il valore della costante SID che è della forma nome_sessione=id_sessione

oppure è una stringa vuota (nel caso che non sia stata avviata alcuna sessione)

 

esempio di propagazione

<a href=”successiva.php?<?=SID ?>”>Clicca qui</a>

per propagare la sessione