Ali Naeimi
Ali Naeimi

Reputation: 622

Redirect from Global.asax

HttpContext.Current.Response.Redirect("~/default.aspx");

When i use this code in session_end in global.asax error to me:

Object reference not set to an instance of an object.

why?!

Upvotes: 0

Views: 1789

Answers (3)

giammin
giammin

Reputation: 18968

When the event SessionEnd is raised the Request and then the Response are null.

HttpContext.Current.Response //this is null

This is by design: Session ends not during a request but when the session timeout

It usually (default config) happens 20 minutes after the last request.

Since there is no request there is also no response.

You need to understand better how Asp.net Session State works

Anyway if you want to redirect the user to a page if the Session is expired you can check for one of your variables stored on session:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["YOUR_VAR_NAME"]==null)
    {
        Response.Redirect("~/default.aspx");
    }
}

Upvotes: 1

BrennQuin
BrennQuin

Reputation: 674

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

I hope the above information will be helpful

Upvotes: 0

C Bauer
C Bauer

Reputation: 5113

Session_end is not an event that gets called by the user of your application, it's something that gets called by the server when a session times out. So when you try to access HttpContext, it is null because there is no HttpContext to access (no user who is currently performing some kind of interaction with your site).

Your attempt to redirect a non-existing HttpContext will always fail no matter what you do.

Upvotes: 1

Related Questions