2017-01-13 1 views
-2

Ich bin ziemlich neu in MVC und vor kurzem wollte ich ein Login-Formular aus einem leeren MVC-Vorlage erstellen. Ich habe von Identity Class und Sessions gehört. Was ist der Unterschied zwischen diesen 2? Sollten sie gleichzeitig benutzt werden oder sind das verschiedene Dinge?Sitzungen in ASP.NET MVC

+1

Sie möchten Tokens und nicht Sitzungen verwenden. Die Sitzung ist sehr veraltet. Werfen Sie einen Blick auf OAuth –

+0

@SimonPrice: Was? Nichts davon macht irgendeinen Sinn. 'Session' ist nicht veraltet. Und ich habe keine Ahnung, welche "Tokens" hier im Zusammenhang stehen, Sitzungen sind ein Konzept, für das es keinen Ersatz oder Alternative gibt. HTTP ist zustandslos. Sie fälschen Zustand mit Sitzungen. So einfach ist das. –

Antwort

2

In dieser relativ einfachen Frage ist viel los. Zuerst denke ich, dass du verstehen musst, was Sitzungen sind.

Das HTTP-Protokoll ist zustandslos. Das bedeutet, dass jede Anfrage ihre eigene Sache ist, unberührt von allem, was vorher passiert ist. Allerdings müssen die Anwendungen State, so dass das Konzept der Sitzungen eingeführt wurden. Eine Sitzung besteht aus einer Kombination von zwei Komponenten, einer serverseitigen und einer clientseitigen Komponente. Im herkömmlichen Sinne speichert der Server einige Daten in Kombination mit einer Sitzungs-ID. Es wird dann ein Cookie an den Client gesendet, der diese Sitzungs-ID enthält. Der Client sendet das Cookie bei der nächsten Anfrage zurück. Wenn der Server den Cookie sieht, verwendet er die Sitzungs-ID, die er enthält, um die Daten abzurufen, die er zuvor gespeichert hat.

Wenn es sich um etwas wie Authentifizierung handelt, muss der Status diese Authentifizierung zwischen den Anforderungen beibehalten. In einer MVC-Site werden Sitzungen zu diesem Zweck verwendet. Auf dem Client wird ein Cookie gesetzt, der vom Client bei jeder Anfrage zurückgeschickt wird. Der Server liest das Cookie, validiert die Authentifizierung und autorisiert den Benutzer. In einer Art Web API sind Sitzungen nicht erlaubt, daher muss die Authentifizierung vom Client bei jeder Anfrage weitergegeben werden, normalerweise in Form eines Headers, der etwa ein Bearer-Token enthält. Jede herkömmliche Website, die von einem durchschnittlichen Benutzer über einen Webbrowser geladen wird, behält jedoch die Authentifizierung über Sitzungen bei.

Jetzt gibt es in ASP.NET-Code ein statisches dynamisches Wörterbuch namens Session. Dies verwendet das Konzept von Sitzungen, um den Status zwischen Webanforderungen zu erhalten, wird jedoch von keinem der Authentifizierungsmechanismen verwendet, die für ASP.NET-Sites verfügbar sind. Von der Verwendung von Session wird abgeraten, da es in der Regel angemessener wäre, Daten beizubehalten, die Sie dort an einem besseren Ort wie einer Datenbank speichern würden. Es gibt bestimmte Bereiche, wo die Verwendung von Session in Ordnung wäre, aber Sie sollten einen wirklich guten Grund dafür haben. Dies hat jedoch nichts mit Authentifizierung/Autorisierung zu tun.

Schließlich verfügen ASP.NET-Sites über eine Reihe verschiedener Authentifizierungssysteme, einige sind veraltet. In Bezug auf traditionelle Benutzerauthentifizierung haben Sie ASP.NET-Mitgliedschaft und Identität. Die Identität ist neuer und wird der ASP.NET-Mitgliedschaft (auch als FormsAuthentication bezeichnet) vorgezogen. Es ist jedoch nur für Websites verfügbar, die MVC 5 oder Core verwenden.

Lang und kurz, wenn Sie eine neue Website erstellen, die Authentifizierung benötigt, müssen Sie in ASP.NET Identity suchen. Es gibt Tonnen von examples and tutorials from Microsoft. Sie müssen möglicherweise Session in Ihrer Anwendung verwenden, aber Sie sollten es so oft wie möglich vermeiden. Unabhängig davon, es ist völlig unabhängig von der Authentifizierung/Autorisierung, obwohl beide unter der Haube ähnliche Prinzipien verwenden.