重定向自 Global.asax

本文关键字:asax Global 重定向 | 更新日期: 2023-09-27 18:37:01

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

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

Object reference not set to an instance of an object.

为什么?!

重定向自 Global.asax

Session_end不是

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

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

当引发事件 SessionEnd 时,请求和响应为空。

HttpContext.Current.Response //this is null

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

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

由于没有请求,因此也没有响应。

您需要更好地了解会话状态的工作原理 Asp.net

无论如何,如果您想在会话

过期时将用户重定向到页面,您可以检查存储在会话上的变量之一:

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

服务器根据内部计时器在内部触发。因此,当这种情况发生时,没有关联 HttpRequest。这就是为什么 Response.Redirect 或 Server.Transfer没有意义,也不起作用。

我希望以上信息对您有所帮助