Nachdem ich viel gesucht habe, habe ich keine Antworten bekommen und musste mich endlich an Sie wenden. Im Folgenden erkläre ich mein Problem im Detail. Es ist zu lang, also hör bitte nicht auf zu lesen. Ich habe mein Problem in einfacher Sprache erklärt.ASP.NET MVC RememberMe
Ich habe ein asp.net mvc-Projekt entwickelt. Ich verwende Standard-ASP.NET-Rollen und Mitgliedschaft. Alles funktioniert gut, aber die Remember Me-Funktion funktioniert überhaupt nicht. Ich listet alle Details der Arbeit auf. Ich hoffe, ihr könnt mir helfen, dieses Problem zu lösen.
Ich brauche einfach:
ich Benutzer müssen Web-Anwendung anzumelden. Bei der Anmeldung können sie sich entweder einloggen oder sich an mich erinnern. Wenn sich der Benutzer mit remember me anmeldet, möchte ich, dass der Browser sich lange Zeit an sie erinnert, sagen wir mindestens ein Jahr oder eine sehr lange Zeit. So wie sie es tun in www.dotnetspider.com, www.codeproject.com, www.daniweb.com und vielen anderen Seiten. Wenn sich ein Benutzer anmeldet, ohne sich an mich zu erinnern, sollte der Browser den Zugriff auf die Website für ca. 20-30 Minuten erlauben und danach sollte seine Sitzung ablaufen. Ihre Sitzung sollte ebenfalls ablaufen, wenn sich der Benutzer anmeldet und den Browser herunterfährt, ohne sich abzumelden.
Hinweis: Ich habe die obige Funktionalität erfolgreich implementiert, ohne die standardmäßigen asp.net Rollen und Mitgliedschaften zu verwenden, indem ich meine eigenen talbes für den Benutzer und die Authentifizierung mit meiner Datenbanktabelle, dem Setzen von Cookies und Sitzungen in meinen anderen Projekten erstelle. Aber für dieses Projekt haben wir von Anfang an Standardasp.net-Rollen und Mitgliedschaften verwendet. Wir dachten, es wird funktionieren und nachdem alles zum Zeitpunkt des Tests erstellt wurde, hat es einfach nicht funktioniert. und jetzt können wir die vorhandene Funktionalität nicht durch Standard-asp.net-Rollen und Mitgliedschaft durch meine eigenen benutzerdefinierten Benutzertabellen und all das Zeug ersetzen, Sie verstehen, worüber ich tale.
Entweder gibt es eine Art von Bug mit Standard-asp.net Rollen und Mitgliedschaft Funktionalität oder ich habe das ganze Konzept der Standard-asp.net Rollen und Mitgliedschaft falsch. Ich habe angegeben, was ich oben möchte. Ich denke, es ist sehr einfach und vernünftig.
Was ich tat
- Login-Formular mit Benutzername, Passwort und erinnere mich Feld.
- Meine Einstellung in web.config:
< authentication mode = "Forms" >
< Formen loginUrl = "~/Account/logon" timeout = "2880"/>
</Authentifizierung > in Meine Controller-Aktion, ich habe dies:
FormsAuth.SignIn (userName, rememberMe);
public void SignIn (Zeichenfolge userName, bool createPersistentCookie) { FormsAuthentication.SetAuthCookie (Benutzername, createPersistentCookie); }
Nun sind die Probleme folgende:
ich bereits in Abschnitt oben gesagt haben: "Ich brauche einfach diese". Benutzer kann sich erfolgreich am System anmelden. Ihre Sitzung existiert für so viele Minuten wie in timeout in web.config angegeben. Ich habe auch ein Beispiel meiner web.config gegeben. In meinem Beispiel, wenn ich das Timeout auf 5 Minuten eingestellt habe, läuft die Benutzersitzung nach 5 Minuten ab, das ist in Ordnung. Wenn der Benutzer jedoch den Browser schließt und den Browser erneut öffnet, kann der Benutzer die Website weiterhin betreten, ohne sich einzuloggen, bis die in "Zeitüberschreitung" angegebene Zeit nicht abgelaufen ist. Das gleitende Ablaufdatum für den Zeitüberschreitungswert funktioniert ebenfalls. Wenn sich der Benutzer nun bei dem System anmeldet, bei dem sich die Option "Angemeldet bleiben" aktiviert hat, läuft die Benutzersitzung nach 5 Minuten noch ab. Das ist kein gutes Verhalten, oder? Ich möchte damit sagen, dass, wenn sich der Benutzer bei dem System anmeldet, dass er sich erinnert, er für eine lange Zeit in Erinnerung bleiben sollte, bis er sich nicht vom System abmeldet oder der Benutzer nicht manuell alle Cookies vom Browser löscht. Wenn sich ein Benutzer am System anmeldet, ohne sich zu erinnern, hat er überprüft, dass seine Sitzung nach den in web.config festgelegten Werten für die Zeitüberschreitung und auch nach dem Schließen des Browsers ablaufen sollte. Das Problem ist, dass wenn der Benutzer den Browser schließt und ihn wieder öffnet, er die Website immer noch betreten kann, ohne sich anzumelden.
Ich suche das Internet viel zu diesem Thema, aber ich konnte die Lösung nicht finden. Im Blogbeitrag (http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx) von Scott Gu zum genau gleichen Thema. Die Benutzer beschweren sich über das Gleiche in ihren Kommentaren, aber es gibt keine einfache Lösung, die von Mr. Scott gegeben wird.
Ich las es an folgenden Orten: http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14/91191.aspx
Ich denke, das Problem der viel von Benutzern ist. Wie aus einem Blogbeitrag von Mr. Scott Gu hervorgeht.
Ihre Hilfe wird sehr geschätzt. Vielen Dank im Voraus.
Sorry, TLDR. :) – kervin
Sie haben Recht. Deine Frage ist zu lang. Du solltest es kürzer machen. –
Übrigens, es ist Mr. Scott Guthrie alias The Gu. –