2010-09-20 10 views
13

FormsAuthentication Controlling In einer ASP.NET MVC2 App haben wir die Standard-Aktion Login ...den createPersistentCookie Ablauf

if (ValidateUser(model.Email, model.Password) 
{ 
    FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe); 
    ... 

, wo der zweite Parameter auf SetAuthCookie createPersistentCookie mit der folgenden Dokumentation:

createPersistentCookie 
    Type: System.Boolean 
    true to create a persistent cookie 
    (one that is saved across browser sessions); otherwise, false. 

Wir möchten, dass der dauerhafte Cookie nach 2 Wochen abläuft (dh ein Benutzer könnte innerhalb von 2 Wochen auf die Seite zurückkehren und sich nicht erneut authentifizieren müssen. Nach dieser Zeit werden sie aufgefordert, sich erneut anzumelden).

Wie setzen wir den Ablauf für den dauerhaften Cookie?

Antwort

33

Können Sie das nicht tun?

<system.web> 
    <authentication mode="Forms"> 
      <forms timeout="20160"/> 
    </authentication> 
</system.web> 

Die Zeitüberschreitung ist in Minuten angegeben.

Dieser Zeitüberschreitungswert ist unabhängig davon, ob Sie einen dauerhaften Cookie erstellen oder nicht. Es besagt nur, dass wenn Sie das Cookie (FormsAuthentication.SignOut) nicht explizit beenden, es nach dem angegebenen Zeitraum automatisch abläuft.

Mit anderen Worten, wenn Sie das tun:

FormsAuthentication.SetAuthCookie(someMembershipName, false); 

im Cookie führen abläuft, wenn:

  • Der Benutzer den Browser schließt, oder
  • Der Timeout erreicht ist.

im Gegensatz zu, wenn Sie tun:

FormsAuthentication.SetAuthCookie(someMembershipName, true); 

Wird auslaufenden in dem Cookie führen nur dann, wenn das Zeitlimit erreicht ist.

HTH

EDIT:

Nehmen von MSDN:

das Timeout Attribut wird wie folgt beschrieben:

die Zeit gibt in ganzzahligen Minuten, nach dem der Cookie läuft ab. Wenn das Attribut SlidingExpiration wahr ist, ist das Attribut für das Zeitlimit ein gleitender Wert, der zur angegebenen Anzahl von Minuten abläuft, nachdem die letzte Anforderung empfangen wurde. Um eine kompromittierte Leistung zu verhindern und mehrere Browserwarnungen für Benutzer zu vermeiden, die Cookie-Warnungen aktiviert haben, wird der Cookie aktualisiert, wenn mehr als die Hälfte der angegebenen Zeit verstrichen ist ( ). Dies könnte einen Genauigkeitsverlust verursachen. Der Standardwert ist "30" (30 Minuten).

Hinweis: Unter ASP.NET V1.1 Persistent Cookies keine Zeitüberschreitung, unabhängig von die Einstellung des Timeout-Attributs. Wie jedoch ASP.NET V2.0, dauerhafte Cookies Timeout nach dem Timeout-Attribut.

Mit anderen Worten, diese Ablaufeinstellung verarbeitet nur das Formularauthentifizierungs-Cookie.

Das Formular-Authentifizierungs-Cookie ist ein clientseitiges Cookie, es hat nichts mit anderen serverseitigen Sitzungen zu tun, die Sie möglicherweise haben (zB ein Einkaufswagen).

Die Session mit folgenden Einstellung abgelaufen ist:

<sessionstate 
     mode="inproc" 
     cookieless="false" 
     timeout="20" 
+0

Mein Verständnis ist, dass diese Timeout-Sitzungsablauf steuert. Unsere Sitzungszeitlimits liegen in der Größenordnung von 2 Stunden. Es ist nicht so, dass wir wollen, dass die Sitzung zwei Wochen lang dauert, sondern dass der "Remember Me" -Cookie für diese Zeit reicht. – Rob

+0

Danke für den Anschluss. Ich werde einige Tests mit Firebug und Session-Ablauf durchführen und melden. In der Zwischenzeit haben +1 und ich deine Antwort akzeptiert. Danke noch einmal. – Rob

+0

@Rob: keine Sorge, lassen Sie mich wissen, wenn Sie irgendwelche probs finden (wie wir die obige Einstellung verwenden und scheint in allen Szenarien gut) – RPM1984