C# 从Global.asax重定向

C# 从Global.asax重定向,c#,asp.net,C#,Asp.net,当我在会话中使用此代码时,请在global.asax中结束 我的错误是: 对象引用未设置为对象的实例。 为什么 当引发事件SessionEnd时,请求和响应均为null HttpContext.Current.Response.Redirect("~/default.aspx"); 这是出于设计:会话不是在请求期间结束,而是在会话超时时结束 它通常(默认配置)发生在最后一个请求后20分钟 由于没有请求,因此也没有响应。 无论如何,如果要在会话过期时将用户重定向到页面,可以检查会话中存储的变量

当我在会话中使用此代码时,请在global.asax中结束 我的错误是:

对象引用未设置为对象的实例。


为什么

当引发事件SessionEnd时,请求和响应均为null

HttpContext.Current.Response.Redirect("~/default.aspx");
这是出于设计:会话不是在请求期间结束,而是在会话超时时结束

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

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

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

HttpContext.Current.Response //this is null

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


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

会话结束由服务器根据内部计时器在内部触发。因此,当发生这种情况时,不存在关联的HttpRequest。这就是为什么Response.Redirect或Server.transfer没有意义,也无法工作的原因


我希望以上信息会有所帮助

可能重复的信息在会话结束时重定向没有意义,因为没有什么可重定向的。会话结束事件是指当会话超时时,没有可重定向的用户。这只是服务器端。有什么解决方案吗?@sidhewsar您的期望是什么?无法将不再打开web浏览器的用户重定向到您的网站
protected void Page_Load(object sender, EventArgs e)
{
    if (Session["YOUR_VAR_NAME"]==null)
    {
        Response.Redirect("~/default.aspx");
    }
}