65.9K
CodeProject 正在变化。 阅读更多。
Home

防止 ASP.NET 中的会话超时

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.47/5 (54投票s)

2005年2月16日

1分钟阅读

viewsIcon

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 指令。

就是这样。

希望这能帮助到某人。

© . All rights reserved.