Variabili di sessione e implementazione corretta

1

C'è qualche altra ragione per usare le variabili di sessione oltre a mantenere i valori più lunghi rispetto alla richiesta corrente? Ad esempio, è consigliabile utilizzare i dati di sessione quando si memorizzano le informazioni in un file sul file system per impedire a un utente di scrivere dati nel file di un altro utente? Capisco cosa sia una variabile di sessione, ma non sono sicuro di come implementarla correttamente.

    
posta Robert 06.12.2011 - 06:43
fonte

2 risposte

3

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.

    
risposta data 06.12.2011 - 08:25
fonte
1

Sì, l'uso più comune delle sessioni è di mantenere i valori più lunghi rispetto alla richiesta corrente. Ad esempio, all'accesso, è possibile cercare il nome di un utente o altri dettagli del profilo e memorizzarli nella sessione se si intende utilizzarli per tutto il tempo - in questo modo non è necessario interrogare continuamente il database per questi valori.

Non sono sicuro di cosa stai ricevendo. Vuoi implementare le tue sessioni? O vuoi implementare l'uso delle sessioni in un dato framework?

    
risposta data 06.12.2011 - 07:48
fonte

Leggi altre domande sui tag