Dans mon site asp.net j'utilise l'authentification par formulaire asp.net 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 les questions suivantes
Quelle devrait être la valeur du délai d'attente pour la session, car j'utilise l'expiration glissante à l'intérieur de l'authention du formulaire, car la session expirera avant l'authentification du formulaire. Comment puis-je le protéger?
Après la déconnexion de l'authentification par formulaire, je voudrais rediriger la page sur logout.aspx mais il me redirige automatiquement sur loginpage.aspx. Comment est-ce possible?
Pour atteindre # 2, vous pouvez vérifier manuellement l'expiration du cookie et son AuthenticationTicket et rediriger vers votre page personnalisée s'ils ont expiré.
Vous pouvez le faire dans l'un des événements: AcquireRequestState , AuthenticateRequest .
Un 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
}
Pour les sites qui ont une dépendance de session, vous pouvez simplement vous déconnecter d'une authentification périmée avec l'événement de démarrage de session dans le global.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();
}
}
Cela fait en sorte que nouvelle session = nouvelle authentification, point.