我在这里发现了一些javascript代码,它会显示一个会话超时警告和一条消息,通知用户他们已经注销(如下所示)但是我的问题是这个代码是如果用户不在前面计算机单击其中一个警报上的“确定”按钮,不再采取进一步操作。因此,当超时警告设置为在重定向前1分钟显示时,当该警告弹出时,计时器停止,直到用户单击该按钮,并且在用户单击确定按钮后1分钟弹出第二条消息,然后直到用户单击该警告上的按钮才会发生重定向。这里最大的问题是显然实际的会话计时器与这些javascript计时器是完全分开的,所以当第一个警告消息弹出时,如果用户不在屏幕前面,说他们在会话到期前有一分钟,那一分钟过去了,然后他们看到了消息,然后点击确定,他们没有被重定向,并认为他们还有一分钟但会话已经过期,我在每个页面中都有代码运行,以便他们重定向到索引页面,如果计时器已经过期并且存储的所有会话变量都已消失,那么他们点击某些内容并将被重定向。
有更好的方法吗?我可以使用javascript来轮询会话状态并找出实际剩余的时间而不是运行一个完全独立的计时器吗?
<script type="text/javascript">
var iddleTimeoutWarning = null;
var iddleTimeout = null;
function pageLoad() {
if (iddleTimeoutWarning != null)
clearTimeout(iddleTimeoutWarning);
if (iddleTimeout != null)
clearTimeout(iddleTimeout);
var millisecTimeOutWarning = <%= int.Parse(System.Configuration.ConfigurationManager.AppSettings["SessionTimeoutWarning"]) * 60 * 1000 %>;
var millisecTimeOut = <%= int.Parse(System.Configuration.ConfigurationManager.AppSettings["SessionTimeout"]) * 60 * 1000 %>;
iddleTimeoutWarning = setTimeout("DisplayIddleWarning()", millisecTimeOutWarning);
iddleTimeout = setTimeout("TimeoutPage()", millisecTimeOut);
}
function DisplayIddleWarning() {
alert("Your session will expire in one minute due to inactivity.");
}
function TimeoutPage() {
alert("Your session has expired due to inactivity.");
location.replace("index.aspx");
}
</script>
感谢。