How to Redirect on Session End [duplicate]

2019-08-05 08:00发布

问题:

This question already has an answer here:

  • Session_End in Global.asax.cs not firing using forms authentication 3 answers

I am trying to redirect user to another page when session ends.

This code will result "Object reference not set to an instance of an object." exception

void Session_End(Object sender, EventArgs E)
{
    HttpContext.Current.Response.Redirect("/");
}

any idea how to do it ?

回答1:

Session_End is fired internally by the server, based on an internal timer. Because of that, there is no HttpRequest associated when that happens. That is why Response.Redirect or Server.Transfer does not make sense and will not work.

I see in the past workarounds about this but never tried, you should make Base class which every page inherit. OnInit in the base class add this. Base Class inherit UI.Page. If you don't use base class logic you should add this logic to every page which is not nice.

    protected override void OnInit(System.EventArgs e)
    {
         Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));      

         if(Session.IsNewSession)  
            Response.Redirect(“Logout.aspx”);// or another page which you want.
    }

The page should be refreshed after 5 seconds once the Session is expired, with the if you will catch that the session is new and you will redirect.