Können wir nicht einfach in der Sitzung speichern, wenn der Benutzer angemeldet ist oder nicht und die .ASPXAUTH loswerden?ASP.NET_SessionId vs. ASPXAUTH warum brauchen wir beide?
Antwort
Sitzungsstatus und Authentifizierung haben nichts miteinander zu tun. Sie können eins ohne das andere verwenden.
.NET gibt einen vollständig anderen Cookie namens ASP.NET_SessionId aus, um den Sitzungsstatus zu verfolgen.
Der ASPXAUTH-Cookie wird verwendet, um festzustellen, ob ein Benutzer authentifiziert ist.
Also dies sind 2 verschiedene Konzept, d. H. Session State Management und Authentication Management mit Formularauthentifizierung.
Wenn Sie Session für die Authentifizierung verwenden und vergessen Formularauthentifizierung werden Sie loswerden .ASPXAUTH
ASP.Net_SessionId
ist ein Cookie, das dem Benutzer session auf dem Server zu identifizieren, verwendet wird. Die Sitzung ist ein Bereich auf dem Server, der zum Speichern von Daten zwischen HTTP-Anfragen verwendet werden kann.
Zum Beispiel kann die Controller Aktion durchführen:
Session["FirstName"] = model.FirstName;
dann in einer nachfolgenden Aktion der erste Name kann aus der Sitzung aufgerufen werden:
var firstName = Session["FirstName"];
Die ASP.NET_SessionId identifiziert die Sitzung für diese Benutzeranfrage. Ein anderer Benutzer sendet ein anderes Cookie und somit wird einen anderen Wert für diesen anderen Benutzer enthalten.
ASPXAUTH
ein Cookie ist der Benutzer zu identifizieren, wenn authenticated ist (das heißt, hat ihre Identität überprüft wurde). Zum Beispiel kann eine Controller-Aktion festzustellen, ob der Benutzer die richtigen Login-Daten zur Verfügung gestellt hat und wenn ja, ein Authentifizierungscookie Ausgabe using:
FormsAuthentication.SetAuthCookie(username, false);
dann später können Sie überprüfen, ob der Benutzer berechtigt ist, unter Verwendung der eine Aktion auszuführen [Authorize] Attribut, das auf das Vorhandensein des ASPXAUTH
Cookies prüft.
Also zusammenfassend sind die Cookies für 2 verschiedene Zwecke. Eine, um den Sitzungsstatus des Benutzers zu bestimmen, und eine, um festzustellen, ob der Benutzer authentifiziert ist.
Um die Antwort auf Ihre Frage zu vervollständigen, ja, könnten Sie die ASPXAUTH
Cookie loswerden und einfach Sitzung verwenden, um den Benutzer zu identifizieren (ich habe dies in älteren klassischen ASP-Anwendungen getan), aber ich würde es nicht empfehlen. Es ist viel besser, die Bedenken sauberer zu trennen und gegebenenfalls die geeignete Methode anzuwenden. Für die Sitzung und die Authentifizierung werden eigene Timeout-Werte festgelegt. Wenn Sie die Sitzung für die Authentifizierung verwenden, haben Sie nur das einmalige Timeout. Ich bin mir jedoch nicht sicher, ob es Sicherheitseinflüsse gibt, wenn ich Session nur für die Authentifizierung verwende, aber ich würde sie trotzdem getrennt halten.
Beide sind erforderlich, entweder unter Verwendung der in der folgenden Verwundbarkeit resultierende:
* ASP.NET_SessionId Allein: Session Fixation
* Formularauthentifizierungscookie Allein: Kann Terminate Authentication Token nicht auf dem Server
Außerdem müssen Sie sie properly.Otherwise, um sicherzustellen, miteinander gekoppelt sind, die Konfiguration stellen auch Risiko:
* lose gekoppelter ASP.NET_SessionId und Formularauthentifizierung Cookies: Noch Vulnerable
ref: http://blog.securityps.com/2013/06/session-fixation-forms-authentication.html
Was ist der Unterschied zwischen ASPXAUT H und AspnetCookie, die erstellt wird, wenn Sie sich in asp.net-Anwendung mit Defauly Registrierung und Login-Funktion anmelden? –