2009-08-17 11 views
8

HIWie kann ich einen Benutzer für 2 Wochen angemeldet lassen?

Ich benutze asp.net mvc mit asp.net Mitgliedschaft.

Ich möchte ein Kontrollkästchen haben, das, wenn darauf geklickt wird, die Benutzer für 2 Wochen angemeldet hält (es sei denn, sie löschen ihre Cookies). So

Ich weiß, sie ist

FormsAuthentication.SetAuthCookie (USERNAME- createPersistentCookie)

aber ich weiß nicht, wie es für 2 Wochen Retention einzurichten.

Ich schrieb die meisten Mitglieder Sachen neu. Also verwende ich Sachen wie Create() und VerifyUser() nicht.

+0

Haben condsidered Sie eine Antwort als angenommen anwer Kennzeichnung? –

Antwort

4

Sie können das globale Sitzungszeitlimit (der Wert ist in Minuten) in web.config einstellen, z.

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

Dies wird für alle authentifizierten Benutzer sein. Wenn Sie die "Remember Me" -Funktionalität verwenden möchten, müssen Sie Ihren eigenen Code schreiben, um das Cookie/Ticket festzulegen. So etwas wie dies (genommen from here):

protected void Page_Load() 
{ 
    if (Request.Cookies["username"] == null || Request.Cookies["username"].Value.ToString().Trim() == "") 
    { 
     Login1.RememberMeSet = true; 
    } 
    else 
    { 
     Login1.UserName = Request.Cookies["username"].Value.ToString().Trim(); 
     Login1.RememberMeSet = true; 
    } 
} 
protected void RememberUserLogin() 
{ 
    // Check the remember option for login 

    if (Login1.RememberMeSet == true) 
    { 
     HttpCookie cookie = new HttpCookie("username"); 
     cookie.Value = Login1.UserName.Trim(); 
     cookie.Expires = DateTime.Now.AddHours(2); 

     HttpContext.Current.Response.AppendCookie(cookie); 
     Login1.RememberMeSet = true; 

    } 
    else if (Login1.RememberMeSet == false) 
    { 
     HttpContext.Current.Response.Cookies.Remove("username"); 
     Response.Cookies["username"].Expires = DateTime.Now; 
     Login1.RememberMeSet = false; 
    } 

} 
+1

, aber wie wäre es, wenn sie die Box nicht überprüfen? Wird nicht jeder diese Einstellung bekommen? – chobo2

+0

Ja, sorry, ich habe deine Frage falsch gelesen - ich werde meine Antwort aktualisieren, um deine spezifische Frage zu beantworten ... –

+0

Ich denke, wenn ich nur das Zeug wie du in der web.config setze aber Schiebe Ablauf deaktivieren dann werde ich was ich bekommen wollen. – chobo2

16

Fügen Sie dem Cookie und der Datenbank einen Hash-Schlüssel oder eine zufällige Zeichenfolge hinzu (beide denselben Schlüssel). Wenn der Cookie- und der Datenbankwert identisch sind und der Benutzer eine neue Sitzung startet, melden Sie ihn erneut an. Wenn der Benutzer die zwei Wochen erreicht, entfernen Sie den geheimen Schlüssel mit einem Cronjob (Unix) oder einer geplanten Aufgabe (Windows) aus der Datenbank.

Warnung: Verlassen Sie sich nicht auf das Cookie Ablaufdatum, da Menschen ihren Browser hacken können.
Regel: NIE, vertrauen Sie jemals auf Ihre Benutzer!

+0

Können Sie bitte erklären, wie das Hashing der zufälligen Zeichenfolge die Sicherheit Ihrer Lösung erhöht? Wenn der Hash der zufälligen Zeichenfolge sowohl in der Datenbank als auch im Cookie gespeichert ist, ist das nicht im Wesentlichen dasselbe wie das Speichern der zufälligen Zeichenfolge in der Datenbank und im Cookie? – rinogo

+0

Ich verwende Hash-Schlüssel und zufällige Zeichenfolge synonym. –

2

Verwenden Sie einfach einen einfachen Cookie mit 2 Wochen Verfallsdatum.

+2

Bei weitem der einfachste Weg - aber auch am einfachsten zu hacken. –

+0

Geringfügiger Punkt, aber es ist kein "Sitzungs" -Cookie, wenn ein Ablaufdatum festgelegt wurde. Es ist ein "permanenter" Cookie. – MrWhite

+0

@ w3d vereinbart. Korrigiert –

Verwandte Themen