从Global.asax重定向

时间:2015-01-09 17:47:18

标签: c# asp.net

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

当我在global.asax中的session_end中使用此代码时 我错了:

Object reference not set to an instance of an object.

为什么?!

3 个答案:

答案 0 :(得分:1)

当事件SessionEnd被引发时,请求然后响应为空。

HttpContext.Current.Response //this is null

这是设计使然:会话不是在请求期间结束,而是在会话超时

时结束

通常(默认配置)在最后一次请求后20分钟发生。

由于没有请求,也没有回复。

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

无论如何,如果你想在会话过期时将用户重定向到一个页面,你可以检查会话中存储的一个变量:

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

答案 1 :(得分:1)

Session_end不是由应用程序的用户调用的事件,它是在会话超时时由服务器调用的事件。因此,当您尝试访问HttpContext时,它为null,因为没有可访问的HttpContext(当前没有用户正在与您的站点进行某种交互)。

无论您做什么,尝试重定向不存在的HttpContext都将失败。

答案 2 :(得分:0)

Session_End由服务器在内部基于内部计时器触发。因此,当发生这种情况时,没有关联的HttpRequest。这就是为什么Response.Redirect或Server.Transferdoes没有意义,也无法工作。

我希望以上信息有用