重定向自 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.
为什么?!
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没有意义,也不起作用。
我希望以上信息对您有所帮助