如何在会话结束时重定向

时间:2015-01-02 20:25:34

标签: c# asp.net asp.net-mvc-5 nullreferenceexception session-timeout

我正在尝试在会话结束时将用户重定向到另一个页面。

此代码将导致“对象引用未设置为对象的实例”。例外

void Session_End(Object sender, EventArgs E)
{
    HttpContext.Current.Response.Redirect("/");
}

任何想法怎么做?

1 个答案:

答案 0 :(得分:1)

基于内部计时器,服务器在内部触发

Session_End。因此,当发生这种情况时,没有关联HttpRequest。这就是为什么Response.RedirectServer.Transfer没有意义且不起作用的原因。

我在过去的变通方法中看到但从未尝试过,你应该创建每个页面都继承的Base类。基类中的OnInit添加此项。基类继承UI.Page如果你不使用基类逻辑,你应该把这个逻辑添加到每个不好的页面。

    protected override void OnInit(System.EventArgs e)
    {
         Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));      

         if(Session.IsNewSession)  
            Response.Redirect(“Logout.aspx”);// or another page which you want.
    }

一旦会话过期,页面应在5秒后刷新,如果你发现会话是新的,你将重定向。