Frage

Ich möchte eine Funktionalität in meiner Anwendung haben, mit der ein Benutzer abhelden kann, dass er auf unbestimmte Zeit angemeldet bleibt (willkürlich die Ablauf des Cookies nach 3 Monaten festlegen).

Der Code, den ich für den Umgang damit habe, ist

private static HttpCookie GetFormsAuthenticationCookie(string userNameResponse, 
                                                        bool persistCookie)
{            
    var cookie = FormsAuthentication.GetAuthCookie(userNameResponse, persistCookie);

    if (persistCookie)
        cookie.Expires = DateTime.Now.AddMonths(3);

    return cookie;
}

private void LoginUser(string userNameResponse, bool PersistCookie)
{
    Response.Cookies.Add(GetFormsAuthenticationCookie(userNameResponse, PersistCookie));

    string navigateAfterUrl = FormsAuthentication.GetRedirectUrl(userNameResponse,
                                                                 PersistCookie);

    Response.Redirect(navigateAfterUrl);
}

Irgendwann später, wenn ich auf die Website zurückkomme, muss ich mich erneut anmelden. Ich habe überprüft, ob das Cookie mit meinem Ablaufdatum zurückkommt und dass es nicht als Session -Cookie festgelegt ist (auch getestet mit dem Schließen/Wiedereröffnen von Browser und Cookie existiert). Mein einziger dachte ist, dass es etwas zu tun hat, wenn ASP.NET die Sitzung abläuft.

Ich habe ein bestimmtes Maschinenschlüssel -Setup in meinem web.config. Sollte nicht dasselbe Cookie -Arbeit, wenn IIS neu gestartet wird usw.? Hat jemand Vorschläge dazu, was dies entweder verursachen oder mindestens, wie man dies weiter verfolgt, da ich mir nichts anderes vorstellen kann.

War es hilfreich?

Lösung

Wenn Sie das anrufen GetAuthcookie Methode a FormsAuthenticationTicket wird mit einem Zeitlimit erstellt, das von der gegeben wurde Auszeit Eigenschaft in Web.Config. Stellen Sie also sicher, dass Sie es richtig einstellen:

<authentication mode="Forms">
  <forms
    loginUrl="/someloginUrl"
    requireSSL="true"
    protection="All"
    // This is the setting you are looking for! (it's in seconds)
    timeout="120"
    domain="example.com"
    slidingExpiration="false"
    name="cookieName" />
</authentication>

Sobald das Ticket verschlüsselt ist, wird es als Wert für den Keks verwendet. Wenn Sie die festlegen Läuft ab Eigenschaft Ihres Cookie zu einem bestimmten Wert Dies zeigt an, dass es für den angegebenen Zeitraum auf dem Client -Computer bestehen bleibt. Auf jeder Anfrage prüft ASP.NET -Laufzeit das Vorhandensein des Cookies, versucht, den Wert zu entschlüsseln und das Ticket zu erhalten. Als nächstes wird überprüft, ob das Ticket mit der Timeout -Immobilie weiterhin gültig ist. Wenn Sie also ein kleines Zeitübergang haben, unabhängig davon, dass Ihr Cookie noch übertragen wird, ist das Ticket nicht mehr gültig und die Authentifizierung fällt aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top