我是一个ASP.NET新手,所以我提前为任何非常明显或我没有解释的事情道歉!
我希望我的应用程序在会话超时时重定向到timedout.aspx,并且还会在五分钟前显示警告。我当前(工作)的代码在this question的答案中做了类似的事情。在每个页面加载时,在代码隐藏中,我获取当前的Session.Timeout,并调用一个使用page.ClientScript.RegisterClientScriptBlock的实用程序函数,将以下JS代码添加到页面中:
function SessionTimeoutRedirect(redirectUrl) {
window.location = redirectUrl;
};
setTimeout('SessionTimeoutRedirect('timeout.aspx'),Session.Timeout * 60000);
此JS代码存储在一个字符串中,然后嵌入到包含在网站上每个页面中的页面中。
If (Not page1.ClientScript.IsClientScriptBlockRegistered(StringConstant.SessionExpiredRedirectScriptKey)) Then
page1.ClientScript.RegisterClientScriptBlock(GetType(System.Web.UI.Page), StringConstant.SessionExpiredRedirectScriptKey, _
scriptStringBuilder.ToString(), True)
End If
我有类似的警告。
如果不是因为应用程序在彼此之间呈现了许多不同的页面,这样可以正常工作:例如,在第一个主页面上,MainPage.aspx,JS函数呈现
var cp = oDialog.get_contentPane();
cp.set_contentUrl('DialogPage.aspx');
所以在这种情况下,MainPage.aspx将在page_load上添加javascript代码在5分钟内超时,然后一旦呈现DialogPage.aspx,Session.Timeout重置但MainPage.aspx仍然具有旧的javascript代码超时。所以MainPage.aspx最终会提前重定向窗口。
我不知道这个解决方案会是什么样子。如果Platform.aspx(和DialogPage.aspx也可能有其他嵌套页面)必须继续轮询服务器,那将重置会话超时。每次在应用程序中加载新页面时,似乎无法在旧页面中重置或删除RegisterClientScriptBlock javascript代码。
感谢您的帮助!