Tutti i framework web all'interno del mondo Java / .NET ti permetteranno di accedere alla sessione e, in quanto tale, al contenuto correlato all'utente connesso. Generalmente, le sessioni sono implementate come Mappa s (Java) o Dictionar ies (.NET). HTTP è un protocollo "stateless", quindi le sessioni sono state inventate sul lato server per mantenere una qualche forma di stato tra due richieste. Consulta la documentazione di Sun sulla progettazione di applicazioni EE e quando utilizzare un dato ambito (pagina, richiesta, sessione, applicazione), in particolare il paragrafo 4.4.7.
Dal punto di vista dello sviluppatore, una delle migliori pratiche è quella di costruire il proprio oggetto che manterrà tutti i dati relativi all'utente (esempio: oggetto UserData con id, nome utente, ecc.) e mapparlo come sessione variabile, invece di mappare direttamente la proprietà di ciascun utente direttamente alla sessione. È possibile implementare un meccanismo che salva la sessione nel database, in un file ma non ci si deve preoccupare di un utente che scrive nella sessione di un altro utente, questo non accadrà (a meno che it è stato violato , e hai un problema più grande a portata di mano).
L'ambito della sessione mantiene i dati più lunghi dell'ambito della richiesta come dici tu. Tuttavia, l'ambito della richiesta viene popolato con i dati immessi dall'utente (in genere è possibile "modificarlo" e aggiungere valori sul lato server, ma generalmente si tratta di una progettazione errata), mentre l'ambito della sessione può essere compilato solo dal server lato. Come ha scritto @KyleHodgson, più che spesso lo usi per conservare i dati che non vuoi recuperare dal database ogni volta che lo stesso utente invia una richiesta. Ecco perché generalmente troverai lì il nome utente, il profilo utente / preferenze, i diritti dell'utente, ecc. E aggiorni questi dati di sessione solo se le informazioni sono aggiornate, ad esempio quando l'utente modifica alcune preferenze.