C# 如何避免由于超时而导致HttpException

C# 如何避免由于超时而导致HttpException,c#,asp.net,exception-handling,session-timeout,logout,C#,Asp.net,Exception Handling,Session Timeout,Logout,我正在一个由.NETASP/C代码支持的网站上工作。客户端要求会话有25分钟的超时。但是,有时会使用该站点,并且用户会长时间保持连接(超过25分钟)。会话结束被触发: protected void Session_End(Object sender, EventArgs e) { Hashtable trackingInformaiton = (Hashtable)Application["trackingInformation"]; trackingInfo

我正在一个由.NETASP/C代码支持的网站上工作。客户端要求会话有25分钟的超时。但是,有时会使用该站点,并且用户会长时间保持连接(超过25分钟)。会话结束被触发:

protected void Session_End(Object sender, EventArgs e)
{
    Hashtable trackingInformaiton = (Hashtable)Application["trackingInformation"];
    trackingInformaiton.Remove(Session["trackingID"]);
}
用户稍后返回,但当他们与网站交互时,他们会收到一个错误,我们会收到此电子邮件通知:

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

错误:System.Web.HttpException

说明:无法加载viewstate。正在加载viewstate的控件树必须与上次请求期间用于保存viewstate的控件树匹配

堆栈跟踪的主要部分是
System.Web.UI.Control.AddedControl
。显然,服务器已经丢弃了会话数据,并且正在发送新数据,但客户端正在尝试处理旧数据。因此出现错误,即
“正在加载viewstate的控件树[不]与用于在prevoius请求期间保存viewstate的控件树匹配。”


那么问题来了。当连接超时时,如何强制指示用户的浏览器重定向到“you's logged out”(您已注销)屏幕?(这是我应该添加到会话结束方法中的内容吗?

我认为您需要使用一些客户端脚本来完成这项工作。尽管Session_End会触发,但如果用户不先执行某些操作(即发送请求),web服务器实际上无法向浏览器发送会话超时消息。因此,您必须使用一些定时客户端脚本来启动该操作。

我想您需要使用一些客户端脚本来完成此操作。尽管Session_End会触发,但如果用户不先执行某些操作(即发送请求),web服务器实际上无法向浏览器发送会话超时消息。因此,您必须让一些定时客户端脚本启动该操作。

类似于javascript的setTimeout函数

e、 g。 页内onload函数

setTimeout(“重定向()”,1500000)//25分钟超时


如果页面上有AJAX,则应清除超时,并在加载新内容时重新启动它。

类似于javascript的setTimeout函数

e、 g。 页内onload函数

setTimeout(“重定向()”,1500000)//25分钟超时


如果页面上有任何AJAX,则应清除超时,并在加载新内容时重新启动。更简单的是使用Html元标记“刷新”。加载页面5分钟后,以下行将触发:

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


也许这就是您需要的。

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

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

也许这就是你需要的