2008-08-21 21 views
8

Durante la creazione di un'applicazione web, e permette di dire che si ha un oggetto d'uso che denota un singolo utente, cosa pensi sia il modo migliore per conservare che l'utente si è connesso?Memorizzazione loggato dettagli utente

Due modi ci ho pensato sono stati:

  • memorizzato il ID utente database in una variabile di sessione
  • memorizzato l'intero oggetto utente in una variabile di sessione

Eventuali suggerimenti migliori , eventuali problemi con l'utilizzo dei modi sopra? Forse problemi di sicurezza o di memoria, ecc. Ecc.

risposta

11

Si consiglia di memorizzare l'ID anziché l'oggetto. Lo svantaggio è che devi colpire il database ogni volta che vuoi ottenere le informazioni di quell'utente. Tuttavia, a meno che ogni millisecondo non contenga nella tua pagina, la performance non dovrebbe essere un problema. Qui ci sono due vantaggi:

  1. Se le informazioni dell'utente cambia in qualche modo, allora non sarete memorizzazione delle informazioni out-of-date nella sessione. Ad esempio, se un amministratore riceve privilegi extra da un amministratore, questi saranno immediatamente disponibili senza che l'utente debba disconnettersi e quindi accedere nuovamente.

  2. Se le informazioni sulla sessione sono memorizzate sul disco rigido, quindi è possibile memorizzare solo dati serializzabili. Quindi se il tuo oggetto Utente contiene mai qualcosa come una connessione al database, un socket aperto, un descrittore di file, ecc., Allora questo non verrà memorizzato correttamente e potrebbe non essere pulito correttamente.

Nella maggior parte dei casi queste preoccupazioni non sarà un problema e neanche approccio andrebbe bene.

2

Ricorda che se memorizzi tutti gli attributi dell'utente (che si estendono alle autorizzazioni) nella sessione, le eventuali modifiche all'utente non avranno effetto fino a quando non effettuano nuovamente l'accesso .

Personalmente, memorizzare il nome e l'ID per un rapido riferimento, a prendere il resto quando ne ho bisogno.

1

Penso che dipenda dalla piattaforma in uso. Se si utilizza ASP.net, darei sicuramente un'occhiata alla classe FormsAuthentication e a tutte le funzionalità incorporate (ed estendibili) che è possibile utilizzare per archiviare le impostazioni utente registrate.

1

Memorizzazione della ID è la migliore pratica nella maggior parte dei casi. Una ragione importante per questo è la scalabilità. Se si archivia l'oggetto utente (o qualsiasi entità dal database, anziché solo i relativi ID), si verificheranno problemi nell'espansione del numero di server che servono il proprio sito. Per ulteriori informazioni, google per "shared nothing architecture".

0

Memorizzo l'utente nella sessione, di solito. Il non può cambiare-finché il problema di accesso non può essere risolto sostituendo l'oggetto nella sessione con una nuova copia dopo aver apportato le modifiche.

0

nostro oggetto utente è abbastanza leggero quindi abbiamo optato per memorizzarlo in una variabile di sessione. Non sono sicuro che sia più efficiente, ma finora funziona molto bene.

6

Per l'amor di sicurezza, vorrei generare (o un GUID o RNG crittograficamente sicuro) un ID di sessione e di avere una tabella che appena le mappe ID di sessione per gli ID utente.Quindi, è sufficiente memorizzare l'ID di sessione nei propri cookie e farlo agire come proxy per l'id utente.

|Session |UserID |
|--------+-------|
|a1d4e...+ 12345 |
|--------+-------|
|c64b2...+ 23456 |
|--------+-------|

Con questo, nessuno può impersonare un altro utente indovinando il loro ID. Consente inoltre di limitare le sessioni degli utenti in modo che debbano accedere ogni tanto (due settimane è il solito). E se vuoi memorizzare altri dati sulla loro sessione, puoi semplicemente aggiungerla a questa tabella.

1

Memorizzerei un valore hash dell'id utente e dell'ID di sessione e quindi lo abbinerò in una tabella di sessioni nel database. In questo modo sarà più difficile spoofare i dati della sessione. Potrei controllare anche l'IP come controllo extra.

Non

so se volete fare affidamento su un ID utente viene memorizzato in una variabile di sessione e di fiducia che si trattava di quell'utente come potrebbe essere alterato abbastanza facilmente e di ottenere l'accesso come un altro membro

Problemi correlati