2013-03-14 6 views
6

Ich denke, ich habe eine einfache Frage bezüglich der Authentifizierung in asp.net mvc 4. Eine Sache, die mir nicht klar ist, kann ich hinzufügen/serialisieren Benutzerdaten in das Autorisierungs-Cookie. Was sind die Vorteile/Kompromisse bei der Bereitstellung der Benutzerdaten im Authentifizierungscookie im Vergleich zum Hinzufügen der Benutzerdaten zur Sitzung? Muss ich dem Authentifizierungs-Cookie überhaupt etwas Einzigartiges hinzufügen? Sollte ich alle Benutzerdaten serialisieren und diese in den Cookie einfügen und die Sitzung nicht zum Speichern der Benutzerdaten verwenden?ASP.NET MVC Benutzerdaten in Forms Authentifizierung Cookie versus Hinzufügen zu Sitzung

Meine Anwendung ist sehr einfach und hat keine Rollen. Ich möchte nur sicherstellen, dass es bei Bedarf gut skaliert.

Für den Moment, ich einfach die Benutzer E-Mail in den Authentifizierungs-Cookie und fügen Sie das Benutzerobjekt der Sitzung hinzu. Ich verwende den folgenden Code, um einen Benutzer zu autorisieren:

Ich schätze wirklich jede Einsicht. Vielen Dank!

Antwort

12

Das Problem mit der ASP.NET-Sitzung besteht darin, dass standardmäßig in Arbeitsspeicher gespeichert wird. Das heißt, wenn Sie in einer Webfarm arbeiten, müssen Sie eine prozessexterne Persistenz für Ihre Sitzung verwenden, da sonst nicht alle Knoten in Ihrer Webfarm dieselben Informationen haben. Daher müssen Sie Ihre Sitzungen im SQL-Server beibehalten, was sehr viel teurer ist als das einfache Lesen der Benutzerdaten aus dem Formular-Authentifizierungs-Cookie. Ein weiterer wichtiger Aspekt von ASP.NET Session ist, dass Sie, wenn Sie sich jemals dafür entscheiden, es zu benutzen (persönlich benutze ich es nie), sicherstellen müssen, dass das Timeout dasselbe ist wie das Zeitlimit Ihres Formularauthentifizierungscookies ablaufen, aber die Benutzerdaten noch in der Sitzung vorhanden sind, oder schlimmer noch, die Sitzung läuft möglicherweise ab, aber das Formularauthentifizierungs-Cookie ist weiterhin gültig.

Also am Ende des Tages müssen Sie weit komplexere Probleme lösen, wenn Sie sich jemals entscheiden, ASP.NET-Sitzung zu verwenden, als Sie ursprünglich hatten (die einfach einige Benutzerinformationen auf alle Anfragen persistent).

+0

Wenn Sie viele Daten in einen Cookie, obwohl es mit jeder Anfrage gesendet wird und könnte mehr Bandbreite essen, als es vernünftigerweise sollte. –

+1

Nein, Sie sollten nicht viele Daten eingeben. Sie sollten nur eine minimale Datenmenge angeben, die auf allen Seiten über den Benutzer verwendet wird. Wenn Sie mehr Daten benötigen, können Sie Ihren Profilanbieter abfragen, um ihn aus dem zugrunde liegenden Datenspeicher abzurufen. Wenn Sie bei jeder Anforderung teure Aufrufe an den Datenspeicher vermeiden möchten, können Sie einen Cache auf dem Server verwenden (Sie müssen jedoch ähnliche Probleme lösen wie die ASP.NET-Sitzung). –

Verwandte Themen