2009-07-01 20 views
24

Desidero memorizzare alcuni dati come il nickname dell'utente e l'ID utente (chiave primaria della tabella) nella sezione dei dati utente del cookie auth. La ragione per cui sto facendo questo è di conservare questi dati quando il browser è chiuso, senza che l'utente si riaccenda.Dati utente archivio ASP.Net in cookie di autenticazione

Modifica: Whoops! Realizzato non mi spiegavo bene. Non sto tentando di riautenticare un utente in base al suo cookie. L'utente è già autenticato dal sistema di appartenenza di ASP.Net - questa parte va bene. Il mio problema è che, se voglio mostrare il nickname dell'utente, ad esempio, devo sparare un'altra query SQL e quindi archiviarla nella sessione. Ho pensato che avrebbe senso memorizzare queste informazioni nel cookie auth (di nuovo, quello già creato da ASP.Net) nella sezione UserData, che sembra essere stata creata per questo scopo.

Non voglio usare i profili perché ho la mia tabella utente con i dati del profilo e avevo bisogno di una soluzione leggera.

Qual è un buon modo per codificare questi dati nella sezione dei dati utente del cookie auth? Stavo pensando alla serializzazione, ma potrebbe essere eccessivo. Sto andando su questo nel modo sbagliato?

risposta

34

ho scritto un approfondito tutorial su come farlo qui:

http://www.danharman.net/2011/07/07/storing-custom-data-in-forms-authentication-tickets/

questo mantiene la cifratura e l'autenticazione, e u ses json per serializzare una classe nel campo UserData.

+0

Bel lavoro, dovrebbe avere più voti! – flq

+0

Soluzione fantastica. Anche senza la parte serializzazione json, questo è un ottimo modo per impostare la stringa UserData e mantenere altri valori predefiniti/configurati nonostante l'API orribile di forms auth. –

+0

La tua risposta sembra fare esattamente ciò che avevo inteso in quel momento! Grazie! –

2

Forse potresti semplicemente creare un altro cookie ... Personalmente non avrei problemi con il cookie auth.

+0

In realtà io sono la generazione di un nuovo cookie di autenticazione. Posso andare avanti e memorizzare una semplice stringa di testo nella sezione UserData del nuovo cookie. La mia domanda riguarda la serializzazione di oggetti più complessi. –

+0

Intendevo un cookie in aggiunta al cookie di autenticazione. Lasciare il cookie auth da solo e creare un nuovo cookie non crittografato per i dati utente temporanei. –

+4

Nah, vorrei memorizzare l'ID utente e il soprannome - non vorremmo memorizzare tali dati sensibili senza crittografia –

3

Sì. Se stai memorizzando l'ID utente e il login nel cookie, cosa impedisce a qualcuno di cambiare i loro cookie con l'ID utente e l'accesso di chiunque?

È necessario impostare un sistema di ticket di autenticazione. Fondamentalmente è un valore del cookie che viene controllato quando non esiste alcuna sessione. Se è presente un valore, lo si esegue su una tabella di ticket che dovrebbe contenere il proprio ID utente. Se trovi il biglietto, dai loro una sessione e un nuovo biglietto.

+1

Hmm ... Sono sicuro che ASP.Net sta già rilasciando un nuovo ticket quando un utente riautentizza il browser in base al suo cookie di autenticazione. Tuttavia, ritengo che stiate anche suggerendo che anche l'ID utente crittografato memorizzato nei dati dell'utente potrebbe essere sostituito dai dati crittografati dell'utente malintenzionato memorizzati nel suo cookie di autenticazione? Ma poi non sono sicuro di seguire il punto della sezione userdata nel cookie auth! –

3

Se si dispone già di una tabella utente con informazioni sul profilo, perché non ci si collega con uno custom profile provider.

Se volete un altro esempio di come implementare qualcosa di simile a questo, si potrebbe dare un'occhiata al SQL Table Profile Provider

0

La memorizzazione di dati utente aggiuntivi nel cookie indica un cookie più grande che viene inviato avanti e indietro dal client ad ogni richiesta.

Un approccio migliore per evitare il database più colpisce siete preoccupati è quello di memorizzare nella cache i dati in memoria dopo che l'utente accede a.

ASP.NET dispone di una cache per richiesta HttpContext.Current.Items e un'applicazione cache di dominio HttpContext.Current.Cache, penso che stai cercando HttpContext.Current.Cache in questa istanza.

In alternativa, se avete bisogno di caching sui server web (server web con bilanciamento del carico) si può guardare in 3rd party negozi di valori chiave come come memcached, Redis, velocità, ecc NCache

+0

come è diverso dalle variabili di sessione –

Problemi correlati