Projet C # MVC4: je souhaite rediriger vers une page spécifique à l'expiration de la session.
Après quelques recherches, j'ai ajouté le code suivant au Global.asax
dans mon projet:
protected void Session_End(object sender, EventArgs e)
{
Response.Redirect("Home/Index");
}
Lorsque la session expire, une exception est renvoyée à la ligne Response.Redirect("Home/Index");
en disant The response is not available in this context
Quel est le problème ici?
La méthode la plus simple dans MVC est la suivante: Dans le cas d'une session expirée, vous devez vérifier chaque session et sa valeur. Si elle est nulle, il est alors redirigé vers la page d'index.
Pour cela, vous pouvez créer un attribut personnalisé comme indiqué: -
Voici la classe qui remplace ActionFilterAttribute.
public class SessionExpireAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
// check sessions here
if( HttpContext.Current.Session["username"] == null )
{
filterContext.Result = new RedirectResult("~/Home/Index");
return;
}
base.OnActionExecuting(filterContext);
}
}
Ensuite, dans l'action, ajoutez simplement cet attribut comme indiqué:
[SessionExpire]
public ActionResult Index()
{
return Index();
}
Ou juste ajouter un attribut une seule fois comme:
[SessionExpire]
public class HomeController : Controller
{
public ActionResult Index()
{
return Index();
}
}
C'est quelque chose de nouveau dans MVC.
Public class SessionAuthorizeAttribute : AuthorizeAttribute
{
Protected override void HandleUnauthorizeRequest(
AuthorizationContext filtercontext )
{
filtercontext.Result = new RedirectResult("~/Login/Index");
}
}
Après avoir appliqué ce filtre sur votre contrôleur à ceux sur lesquels vous souhaitez appliquer une autorisation.
[SessionAuthorize]
public class HomeController : Controller
{
// Something awesome here.
}
Au-dessus de la fonction HandleUnAuthorizeRequest de SessionAuthorizeAttribute n'appelle qu'une fois que l'autorisation a échoué.
Cordialement.