15 Stimmen

Weiterleitung auf eine spezifische Seite nach Ablauf der Sitzung (MVC4)

C# MVC4 Projekt: Ich möchte auf eine bestimmte Seite umleiten, wenn die Sitzung abläuft.

Nach einigen Recherchen habe ich den folgenden Code zur Global.asax in meinem Projekt hinzugefügt:

protected void Session_End(object sender, EventArgs e)
{
     Response.Redirect("Home/Index");
}

Wenn die Sitzung abläuft, wird eine Ausnahme an der Zeile Response.Redirect("Home/Index"); geworfen, die besagt Die Antwort ist in diesem Kontext nicht verfügbar

Was ist hier falsch?

28voto

Kartikeya Khosla Punkte 18823

Der einfachste Weg in MVC ist, dass im Falle des Ablaufs der Sitzung in jeder Aktion überprüft werden muss, ob die Sitzung vorhanden ist, und falls sie null ist, zur Indexseite umgeleitet wird.

Zu diesem Zweck können Sie ein benutzerdefiniertes Attribut wie folgt erstellen:

Hier ist die Klasse, die ActionFilterAttribute überschreibt.

public class SessionExpireAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContext ctx = HttpContext.Current;
            // Überprüfen Sie hier die Sitzungen
            if( HttpContext.Current.Session["username"] == null ) 
            {
               filterContext.Result = new RedirectResult("~/Home/Index");
               return;
            }
            base.OnActionExecuting(filterContext);
        }
    }

Dann fügen Sie einfach dieses Attribut wie folgt zur Aktion hinzu:

[SessionExpire]
public ActionResult Index()
{
     return Index();
}

Oder fügen Sie das Attribut nur einmal wie folgt hinzu:

[SessionExpire]
public class HomeController : Controller
{
  public ActionResult Index()
  {
     return Index();
  }
}

0voto

Mohsin khan Punkte 346

Dies ist etwas Neues in MVC.

    Public class SessionAuthorizeAttribute : AuthorizeAttribute
    {
        Protected override void HandleUnauthorizeRequest( 
                                   AuthorizationContext filtercontext )
            { 
                filtercontext.Result = new RedirectResult("~/Login/Index");
            } 
    }

Nachdem Sie diesen Filter auf Ihren Controller angewendet haben, dort, wo Sie die Autorisierung anwenden möchten.

    [SessionAuthorize]
    public class HomeController : Controller
    {
        // Hier ist etwas Tolles.
    }

Die Funktion HandleUnAuthorizeRequest der oben genannten SessionAuthorizeAttribute wird nur aufgerufen, wenn die Autorisierung fehlschlägt, anstatt wiederholt nach der Autorisierung zu überprüfen.

Mit freundlichen Grüßen MK

0voto

Hamid Jolany Punkte 612

Erstellen Sie diese Aktionsfilterklasse

    class SessionExpireAttribute : ActionFilterAttribute {
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Session["logged"] == null)
        {
            filterContext.Result = new RedirectResult("/Account/Login");
        }
        base.OnActionExecuted(filterContext);
    }

Verwenden Sie es dann in Ihrer Klasse oder Methode wie unten gezeigt

[SessionExpireAttribute]
public class MyController : Controller
{
    ....
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X