【问题标题】:How to avoid an HttpException due to timeout如何避免由于超时而引发的 HttpException
【发布时间】:2011-02-12 15:15:50
【问题描述】:

我正在开发一个由 .NET asp/C# 代码驱动的网站。客户端要求会话有 25 分钟的超时。但是,有时会使用该站点,并且用户会长时间保持连接(超过 25 分钟)。 Session_End 被触发:

protected void Session_End(Object sender, EventArgs e)
{
    Hashtable trackingInformaiton = (Hashtable)Application["trackingInformation"];
    trackingInformaiton.Remove(Session["trackingID"]);
}

用户稍后返回,但当他们与网站交互时,他们收到错误,我们收到此电子邮件通知:

用户:未经身份验证的用户

错误:System.Web.HttpException

描述:加载视图状态失败。正在加载视图状态的控件树必须与之前请求期间用于保存视图状态的控件树匹配...

堆栈跟踪的重要部分是System.Web.UI.Control.AddedControl。显然,服务器已经丢弃了会话数据,并且正在发送新数据,但客户端正在尝试处理旧数据。因此"the control tree into which viewstate is being loaded [doesn't] match the control tree that was used to save the viewstate during the prevoius request."

的错误

问题来了。当连接超时时,如何force 指示用户的浏览器重定向到“您已注销”屏幕? (这是我应该添加到 Session_End 方法的东西吗?)

【问题讨论】:

    标签: c# asp.net exception-handling session-timeout logout


    【解决方案1】:

    更简单的是使用 Html 元标记“刷新”。以下行将在页面加载 5 分钟后触发:

    <meta http-equiv="refresh" content="300;url=http://domain.org/Logout.aspx" />
    

    也许这就是你需要的。

    【讨论】:

      【解决方案2】:

      类似于 javascript 的 setTimeout 函数。

      例如 在页面加载功能

      setTimeout("redirect()", 1500000); //25分钟超时

      如果您的页面上有任何 AJAX,您应该清除超时并在新内容加载时重新开始。

      【讨论】:

        【解决方案3】:

        我认为您需要使用一些客户端脚本来执行此操作。尽管 Session_End 会触发,但如果用户没有先执行某些操作(即发送请求),Web 服务器实际上无法将会话超时消息传达给浏览器。因此,您必须有一些定时客户端脚本来启动它.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-31
          • 2011-02-16
          • 2015-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多