Frage

Nach viel suchen Ich habe keine Antworten bekommen und schließlich hatte ich Ihnen zu kommen. Im Folgenden werde ich mein Problem ausführlich bin zu erklären. Es ist zu lange, so bitte nicht beenden zu lesen. Ich habe mein Problem in einfacher Sprache erklärt.

Ich habe ein asp.net MVC-Projekt entwickelt. Ich verwende Standard ASP.NET-Rollen und die Mitgliedschaft. Alles funktioniert gut, aber das erinnert mich Funktionalität nicht funktioniert überhaupt nicht. Ich bin das alle Einzelheiten der Arbeit. Hoffnung euch kann mir helfen, dieses Problem zu lösen.

Ich brauche einfach diese:

Ich brauche Benutzer Login zu Web-Anwendung. Während der Anmeldung können sie entweder Login mit mir erinnern oder ohne sie. Wenn Benutzer sich anmeldet mit erinnere mich, ich Browser sie für lange Zeit erinnern wollen, sagen wir atleast einem Jahr oder beträchtlich lange Zeit. Die Art, wie sie tun es in www.dotnetspider.com, www.codeproject.com, www.daniweb.com und vielen anderen Orten. Wenn Benutzer sich anmeldet, ohne mich erinnern, sollte dann Browser für ca. 20 -30 Minuten Zugriff auf eine Website integrieren lassen und danach die Sitzung ablaufen soll. Ihre Sitzung sollte auch verfallen, wenn der Benutzer anmeldet und schaltet den Browser, ohne sich abzumelden.

Hinweis: I über Funktionalität erfolgreich implementiert haben, ohne Standard asp.net Rollen zu verwenden und die Mitgliedschaft von meinem eigenen talbes für Benutzer das Erstellen und Authentifizieren gegen meine Datenbank-Tabelle, das Setzen von Cookies und Sessions in meinen anderen Projekten. Aber für dieses Projekt beginnen wir von Anfang an verwendeten Standard asp.net Rollen und Mitgliedschaft. Wir dachten, es funktionieren wird und nach allem, was zum Zeitpunkt der Build testet es hat einfach nicht funktioniert. und jetzt können wir nicht ersetzen Sie die vorhandene Funktionalität mit Standard asp.net Rollen und die Mitgliedschaft mit meiner eigenen benutzerdefinierten Tabellen und all die Dinge, verstehen Sie, was ich über mich taling.

Entweder gibt es eine Art von Fehlern mit Standard asp.net Rollen und Mitgliedschaft Funktionalität oder ich habe das gesamte Konzept des Standard asp.net Rollen und Mitgliedschaft falsch. Ich habe gesagt, was ich oben will. Ich denke, es ist sehr einfach und vernünftig.

Was ich tat,

  1. Login-Formular mit Benutzername, Passwort und erinnere mich Feld.
  2. Meine Einstellung in web.config:



  3. In My Controller-Aktion, ich habe dies:

    FormsAuth.SignIn (USERNAME- rememberMe);

    public void SignIn (string username, bool createPersistentCookie)  {    FormsAuthentication.SetAuthCookie (Benutzername, createPersistentCookie);  }

Jetzt sind die Probleme sind folgende:

Ich habe bereits in obigem Abschnitt angegeben „Ich habe einfach dieses benötigen“. Benutzer können erfolgreich in das System einloggen. Ihre Sitzung gibt es für so viele Minuten wie in Timeout-Wert in web.config angegeben. Ich habe auch eine Probe meiner web.config gegeben. In meinem samplem, wenn ich das Timeout auf 5 Minuten eingestellt, dann endet Benutzersitzung nach 5 Minuten, das ist ok. Aber wenn der Benutzer den Browser schließt und den Browser wieder öffnen, kann der Benutzer noch die Website ohne sich einzuloggen, bis Zeit geben in „Timeout“ angegeben hat nicht bestanden werden. Der gleitende Ablauf für Timeout-Wert arbeitet auch gut. Nun, wenn Benutzer an das System mit erinnere mich geprüft, Benutzersitzung abläuft noch nach 5 Minuten. Das ist nicht gut verhalten, ist es ?. Ich will sagen, dass, wenn Benutzer an das System mit erinnere mich überprüft er für eine lange Zeit in Erinnerung bleiben sollte untill er sich anmeldet nicht aus dem System oder Benutzer nicht manuell löscht alle Cookies von Ihrem Browser. Wenn Benutzer an das System ohne erinnere checkte mich seine Sitzung nach der Timeout-Zeit angegebenen Werte in web.config ablaufen soll und auch, wenn der Nutzer den Browser schließt. Das Problem ist, dass, wenn der Benutzer den Browser schließt und wieder öffnet er immer noch auf die Website ohne Anmeldung eingeben.

Ich suche Internet viel zu diesem Thema, aber ich konnte nichtdie Lösung. In der Blog-Post ( http://weblogs.asp.net/ ScottGu / Archiv / 2005/11/08 / 430011.aspx von Scott Gu auf genau demselben Thema gemacht). Die Benutzer werden über die gleiche Sache in ihren Kommentaren beschweren ut es keine einfache Lösung in von Mr. Scott gegeben ist.

Ich las es an Orten, folgende: http://weblogs.asp.net/scottgu/archive/2005 /11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14 /91191.aspx

Ich denke, das ist ein Problem der viel von den Benutzern. Wie scheint aus Blog-Post gemacht von Mr. Scott Gu.

Ihre Hilfe wirklich geschätzt wird. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Was möchten Sie tun ist eine andere Timeout haben, wenn die RememberMe Option aktiviert ist, als wenn es nicht aktiviert ist. Leider ist die SetAuthCookie Methode nicht zulassen, dass Sie den Ablauf manuell einstellen, so dass Sie das selbst tun werden müssen.

Das Problem ist dann, wie das zu tun?

ASP.NET MVC verwendet die FormsAuthentication Klasse von System.Web.Security, das zu tun, weil es nicht trivial ist, wenn Sie auch die Konfigurationseinstellungen und cookieless Browsing und SSL unterstützen wollen, aber ich denke, dass, wenn Sie dies einfach tun:

int timeout = rememberMe ? 525600 : 30; // Timeout in minutes, 525600 = 365 days.
var ticket = new FormsAuthenticationTicket(userName, rememberMe, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);// Not my line
cookie.HttpOnly = true; // cookie not available in javascript.
Response.Cookies.Add(cookie);

... Sie werden eine Basisversion von dem, was Sie benötigen.

. HINWEIS: Ich habe nicht diesen Code testen

Andere Tipps

Kevin und Dave, Leute Rock, Mann.

Dave, zusätzlich zu Ihrem Code hatte ich eine weitere Zeile hinzufügen, um es Arbeit zu machen. Ich meine, um es für mindestens ein Jahr zu machen erinnern. Ich musste assign Wert cookie.Expires zusätzlich zu Ihrem Code, um es Arbeit zu machen. Wenn diese Zeile cookie.Expires nicht gesetzt ist das Cookie nach Neustart des Computers verloren i am Ende der Sitzung bedeuten. Ich bemerkte dies in FireFox. Ich ging durch die Details des Plätzchens und ich fand: Wenn cookie.Expires nicht gesetzt ist, dann Wert für „Gültig bis:“ -Attribut in Firefox ist „Am Ende der Sitzung“ aber wenn cookie.Expires gesetzt ist, dann wird der Wert für „Gültig bis :.“-Attribut in Firefox auf das Datetime ist der cookie.Expires Wert gesetzt wurde

Hier ist der Code:

int timeout = createPersistentCookie ? 525600 : 2; // Timeout in minutes,525600 = 365 days
var ticket = new FormsAuthenticationTicket(userName,createPersistentCookie,timeout);            
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);//My Line
HttpContext.Current.Response.Cookies.Add(cookie);

Danke Jungs, das war wirklich eine großartige Lösung.

Nur eine kurze Notiz über die Verwendung Mitgliedschaft Auth-Ticket in einer gemeinsamen Umgebung für alle, die mit diesem Thema landen hier können. Ich habe eine MVC-Website runnig bei GoDaddy bekam und mit erinnere mich Mühe hatte. Das war die Lösung:

<system.web>
<machineKey
  validationKey="4C6404A3B305CD6E8CFEAC258F042FB95E45E9C3C2CEC3AAB838996CFBE661E41DF1A1BAC75B9B45E02147612FD9B71CA74DDA50B0D0D6ED11F0BB8E31048953"
  decryptionKey="BC471CF17A97B08A9DF85C7B502AD95680E3BE4418FD9C6CEA57E7F97ED64291"
  validation="SHA1" decryption="AES"
/>

Dank: http://www.geekfreeq.com/aspnet -Denken Sie daran-me-Option-forms-authentication-nicht-arbeit /

Das ist kein Problem, es ist ein Merkmal:)

Die Sitzung des Benutzers ist noch nicht abgelaufen, so, auch wenn sie in der Nähe und den Browser wieder öffnen, das Cookie noch gut ist.

Es ist der Ablauf des Cookies, dass die Sitzung des Benutzers Ungültigmachungseinträge.

ich elbe umgesetzt hatte, und wenn ich es testen, funktioniert es gut in Mozila aber nicht für alle PC in IE8 arbeiten, ich hatte auch aktualisiert Einstellung Cookies in IE zu akzeptieren, aber immer noch nicht funktioniert.

Internet Explorer 8.x

  1. Klicken Sie auf das Extras-Menü.
  2. Wählen Sie Internetoptionen im Menü - ein neues Fenster öffnet sich.
  3. Klicken Sie auf der Registerkarte Datenschutz in der Nähe des oberen Rand des Fensters.
  4. Klicken Sie auf die Schaltfläche Standard des Fensters.
  5. Bewegen Sie den Regler so, dass es auf einer der Ebenen unterhalb Mittel Hoch ist (einschließlich der Mittel, Niedrig, Alle Cookies akzeptieren).
  6. Speichern die Änderungen mit OK.
  7. Sie sollten fähig sein Artikel jetzt in den Warenkorb hinzuzufügen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top