60 votes

L'Authentification par formulaires Délai vs d'expiration de la Session

Dans mon asp.net site, je suis en utilisant asp.net formulaire d'authentification avec la configuration suivante

<authentication mode="Forms">
    <forms loginUrl="~/Pages/Common/Login.aspx" defaultUrl="~/Pages/index.aspx" protection="All" timeout="30" name="MyAuthCookie" path="/" requireSSL="false" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" >
    </forms>
</authentication>

J'ai des questions suivantes

  1. Quelle devrait être la valeur de délai d'expiration de session, car je suis à l'aide de glissement expiration forme à l'intérieur authention en raison de la session expirera avant la fin de formulaire d'authentification. Comment puis-je protéger?

  2. Après formauthentication journal, je voudrais rediriger la page de déconnexion.aspx, mais il est automatiquement rediriger moi à loginpage.aspx. Comment est-il possible?

51voto

Dmytrii Nagirniak Points 10979
  1. Pour être sur le côté sécuritaire: Délai d'attente de Session(Session) <= Délai d'attente(FormsAuthentication) * 2
  2. Si vous souhaitez afficher une page autre que celle qui est spécifiée dans l'attribut loginUrl après l'authentification délai d'attente, vous devez gérer manuellement comme ASP.NET ne fournit pas un moyen de le faire.

Pour atteindre #2 vous pouvez vérifier manuellement le cookie et sa AuthenticationTicket pour la date d'expiration et les rediriger vers votre page personnalisée si ils ont expiré.
Vous pouvez le faire dans l'un des événements: AcquireRequestState, AuthenticateRequest.

Exemple de code dans l'événement peut ressembler à:

// Retrieve AuthenticationCookie
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie == null) return;
FormsAuthenticationTicket ticket = null;
try {
    ticket = FormsAuthentication.Decrypt(cookie.Value);
} catch (Exception decryptError) {
    // Handle properly
}
if (ticket == null) return; // Not authorised
if (ticket.Expiration > DateTime.Now) {
    Response.Redirect("SessionExpiredPage.aspx"); // Or do other stuff here
}

26voto

b_levitt Points 1218

Pour les sites qui ont une session de dépendance, vous pouvez simplement le signe d'un état de l'authentification avec le début de la session de l'événement dans le monde.asax:

void Session_Start(object sender, EventArgs e)
{
  if (HttpContext.Current.Request.IsAuthenticated)
  {

    //old authentication, kill it
    FormsAuthentication.SignOut();
    //or use Response.Redirect to go to a different page
    FormsAuthentication.RedirectToLoginPage("Session=Expired");
    HttpContext.Current.Response.End();
  }

}

Ce qu'il fait en sorte que la nouvelle session = new authentification, période.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X