Comment rediriger vers la page de connexion lorsque le temps d'arrêt de la session est terminé dans asp.net mvc
j'ai un ASP.NET application MVC4 où je mets en œuvre sessionTimeout comme:
<configuration>
<system.web>
<sessionState timeout="2"></sessionState>
</system.web>
</configuration>
Et dans d'authentification:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="1" />
</authentication>
</system.web>
</configuration>
après l'expiration de la session (2 minutes), je dois rediriger vers la page de connexion, mais la redirection ne se produit pas.
Comment puis-je changer le code pour qu'il soit redirigé?
3 réponses
d'Une manière qui est En cas d'expiration de Session, dans chaque action vous devez vérifier sa session et si elle est nulle alors rediriger vers la page de connexion.
Mais c'est très mouvementée méthode
Pour surmonter cela, vous devez créer votre propre ActionFilterAttribute
qui aura pour ce faire, vous avez juste besoin d'ajouter cet attribut dans chaque méthode d'action.
Voici la classe qui remplace ActionFilterAttribute.
public class SessionExpireFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
// check if session is supported
CurrentCustomer objCurrentCustomer = new CurrentCustomer();
objCurrentCustomer = ((CurrentCustomer)SessionStore.GetSessionValue(SessionStore.Customer));
if (objCurrentCustomer == null)
{
// check if a new session id was generated
filterContext.Result = new RedirectResult("~/Users/Login");
return;
}
base.OnActionExecuting(filterContext);
}
}
Puis dans l'action juste ajouter cet attribut comme donc:
[SessionExpire]
public ActionResult Index()
{
return Index();
}
Cela vous fera du travail.
je découvre une façon très simple de rediriger la page de connexion lorsque la session se termine en MVC. J'ai déjà testé et cela fonctionne sans problèmes.
bref, j'attrape la fin de la session dans _Layout 1 minute avant et je fais une redirection.
j'essaie de tout expliquer pas à pas.
si nous voulons que la session se termine 30 minutes après et rediriger vers loginPage voir les étapes:
changez la configuration web comme ceci (mettez 31 minutes):
<system.web> <sessionState timeout="31"></sessionState> </system.web>
ajouter ce JavaScript dans
_Layout
(lorsque la session se termine 1 minute avant que ce code ne fasse redirection, il fait compter le temps après la dernière action de l'Utilisateur, pas la première visite sur place)<script> //session end var sessionTimeoutWarning = @Session.Timeout- 1; var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000; setTimeout('SessionEnd()', sTimeout); function SessionEnd() { window.location = "/Account/LogOff"; } </script>
Voici mon action LogOff, qui ne fait que LogOff et redirect LoginIn Page
public ActionResult LogOff() { Session["User"] = null; //it's my session variable Session.Clear(); Session.Abandon(); FormsAuthentication.SignOut(); //you write this when you use FormsAuthentication return RedirectToAction("Login", "Account"); }
j'espère que c'est un code très utile pour vous.
Il y a une solution générique:
disons que vous avez un controller nommé Admin où vous mettez du contenu pour les utilisateurs autorisés.
alors, vous pouvez outrepasser le Initialize
ou OnAuthorization
méthodes du controller Admin et écrire rediriger vers la page de connexion logique de délai d'expiration de session dans ces méthodes comme suit:
protected override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
{
//lets say you set session value to a positive integer
AdminLoginType = Convert.ToInt32(filterContext.HttpContext.Session["AdminLoginType"]);
if (AdminLoginType == 0)
{
filterContext.HttpContext.Response.Redirect("~/login");
}
base.OnAuthorization(filterContext);
}