防止 ASP.NET 中的会话超时






4.47/5 (54投票s)
2005年2月16日
1分钟阅读

718021
一个简单的代码,用于防止用户输入数据或编辑 HTML 等时会话超时。
引言
我开发 ASP 和 ASP.NET 站点多年,最常见的用户问题之一(除了基本的愚蠢 ;-) 是,当用户正在向 Web 表单或 HTML 编辑框输入信息时,会话超时时间会过去,他们会丢失所有已完成的工作。
我尝试过使用 JavaScript 提示用户点击按钮或刷新页面等解决方案,但这存在限制,尤其是在他们由于必填字段限制而无法提交表单时。
解决方案
我最近遇到了一些试图解决此问题的代码,但没有成功,因为作者忘记了客户端缓存的问题。
将以下代码添加到您的页面
private void Page_Load(object sender, System.EventArgs e)
{
this.AddKeepAlive();
}
private void AddKeepAlive()
{
int int_MilliSecondsTimeOut = (this.Session.Timeout * 60000) - 30000;
string str_Script = @"
<script type='text/javascript'>
//Number of Reconnects
var count=0;
//Maximum reconnects setting
var max = 5;
function Reconnect(){
count++;
if (count < max)
{
window.status = 'Link to Server Refreshed ' + count.toString()+' time(s)' ;
var img = new Image(1,1);
img.src = 'Reconnect.aspx';
}
}
window.setInterval('Reconnect()',"+ _
int_MilliSecondsTimeOut.ToString()+ @"); //Set to length required
</script>
";
this.Page.RegisterClientScriptBlock("Reconnect", str_Script);
}
这段代码将在会话超时前 30 秒内请求页面 Reconnect.aspx。
重要部分
现在,这第一次有效,但如果页面被本地缓存,则不会向服务器发出请求,会话会再次超时。因此,我们需要指定页面 Reconnect.aspx 不能在服务器或客户端上缓存。
通过使用以下内容创建 Reconnect.aspx 页面来完成此操作
<%@ OutputCache Location="None" VaryByParam="None" %>
<html>
</html>
OutputCache
指令可防止对其进行缓存,因此每次都会发出请求。此页面不需要后台文件,因此也不需要 @Page
指令。
就是这样。
希望这能帮助到某人。