在使用AJAX时,如何防止会话过期?

时间:2010-09-17 23:13:43

标签: c# asp.net asp.net-ajax session-timeout meta-tags

我有一个.Net 3.5网站,它使用Windows身份验证,并使用我的基本母版类的预渲染上的元标记使会话过期。

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    if (Response.ContentType == "text/html")
        this.Page.Header.Controls.Add(new LiteralControl(
            String.Format("<meta http-equiv='refresh' content='{0};url={1}'>",
            SessionLengthMinutes * 60, SessionExpireDestinationUrl)));
}

这适用于完全回发的网页。但是,在我的应用程序中有一些页面,用户在更新面板中执行了大量工作。我公司的政策是超时15分钟。这意味着,在更新面板页面内部工作15分钟后,用户将被重定向到应用程序启动页面。

有没有办法在异步回发上重置或扩展元标记?或者也许是完全实现这一目标的更好方法?

3 个答案:

答案 0 :(得分:1)

完全实现这一目标的更好方法是使用javascript。如果您的页面已添加书签,这将阻止与元刷新相关的问题。

代替页面META REFRESH使用此javascript:

<script type="text/javascript">
    var _timerID = setTimeout("window.location='splash-url'", 900000); //15 mins
</script>

当您从更新面板发出请求时,请使用以下javascript:

<script type="text/javascript">
    clearTimeout(_timerID);
    _timerID = setTimeout("window.location='splash-url'", 900000); //15 mins
</script>

答案 1 :(得分:0)

过去我在响应AJAX调用的方法上使用了WebMethod(EnableSession = true)属性

答案 2 :(得分:0)

您也可以使用AJAX请求来保持会话处于活动状态。只要用户在浏览器中打开您的页面,这将有效。 见http://808.dk/?code-ajax-session-keepalive