2010-02-15 22 views
14

Ich habe die Stimmung mit Sitzungsvariable ist in ASP.NET MVC Art betrachtet.asp.net mvc - wo Benutzerid speichern - Integer?

Sobald sich ein Benutzer anmeldet, würde Ich mag die Benutzer-ID des Benutzers halten, so dass ich es nicht bei Abfrage die ganze Zeit usw.

Was ist der effizienteste Weg, dass in ASP.NET MVC zu tun ?

Antwort

18

Ich habe ähnliche Fragen hin und wieder auftauchen zu sehen, und ich kann nicht herausfinden, wo diese „Stimmung“ herkommt. Genau dafür ist Session konzipiert - zum Speichern sitzungsbezogener Informationen. Es ist absolut nicht falsch, mit Session eine Benutzer-ID oder ähnliche Informationen zu speichern.

+0

Vielen Dank! * Kommentarfüller *. –

+2

Die Stimmung stammt von Leuten, die Session als Authentication falsch benutzen, was genau Progtick macht. – jfar

+1

Ich dachte, dass der Mitgliedschafts-/Profilanbieter das alles für Sie erledigt hat, was seine Verwendung von Microsoft unterstützt. Sie enthalten sogar ein Beispiel für die Beispiel-App. –

0

Sitzungsstatus. Sollte es nicht verwenden, wenn es nicht angemessen ist. Aber nichts anderes funktioniert für Anmeldeinformationen. Stellen Sie nur sicher, dass sie serialisierbar sind, sodass Sie die Sitzung bei Bedarf aus dem Prozess schieben können.

+1

"Aber nichts anderes funktioniert für Anmeldeinformationen" Was? Wie Cookies und FormsAuthentication? Cookies sind 1000% stabiler als Session. – jfar

+0

Warum können Sie nicht einfach nach einer Sitzung suchen und den Benutzer erneut anmelden lassen, wenn er nicht verfügbar ist? Ich verstehe nicht ganz, warum Cookies besser sind. –

+0

Und ich streite nicht - ich würde wirklich gerne mehr darüber erfahren. –

2

Sessions sollen für Stateful-Interaktion mit dem Benutzer verwendet werden - ein Einkaufswagen in den Sinn kommt. Sie werden herabgesehen, weil sie beim Testen schmerzhaft sind und dazu neigen, die Serialisierungslogik in den Controller zu zwingen. Wenn Sie nur Abfragen minimieren möchten, sollten Sie Caching verwenden.

EDIT: Tutorials für HttpContext.Cache sind überraschend schwer zu bekommen. Steven Sanderson hat ~ 4 Seiten in Pro ASP.net MVC Framework (Apress 2009) p. 530-534.

Caching in asp.net-mvc könnten Sie auch einige Hinweise geben.

+0

können Sie einen Link zu asp.net mvc caching? – TPR

8

Sie haben die richtige Stimmung. Es ist nur in vielen Szenarien nicht notwendig. Der Sitzungsstatus kann leicht verloren gehen und wird häufig für die Behandlung von angemeldeten Benutzern missbraucht (die Einstellung, dass der Benutzer angemeldet ist, erfolgt durch Setzen von Session ["IsLoggedIn"] = true oder durch Überprüfen von Session ["User"]! = Null, Session verschwindet plötzlich Benutzer wird ausgeloggt), wenn die Formularauthentifizierung verwendet werden soll. Hier können Sie über die Formularauthentifizierung lesen und Speichern zusätzlicher Daten mit sich:

Forms Authentication Configuration and Advanced Topics

Wenn Sie noch Sitzung verwenden möchten, ist es gut, Wrapper zu erstellen, um es mehr prüfbar und loszuwerden Strings im Code:

Wrapper for ASP.NET Session

+0

Würden Sie nicht Formulare auth verwenden und dann den Benutzernamen usw. in der Sitzung speichern? –

+1

@ d03boy: Der Benutzername wird standardmäßig im Formularauthentifizierungscookie gespeichert.Sie können die ID des Benutzers hinzufügen. Wenn Sie die Sitzung verlieren (und dies kann in vielen Situationen passieren, zum Beispiel wenn jemand web.config ändert), haben Sie Ihre Daten an einem sicheren Ort und müssen sie nicht neu erstellen. OK, Sie können die Sitzung verwenden, aber denken Sie daran, dass sie verloren gehen kann, wenn der Benutzer angemeldet ist. – LukLed

Verwandte Themen