我在這裏發現了一些javascript代碼,它將顯示會話超時警告和消息以通知用戶他們已經註銷(如下所示)。但是,我的問題與此代碼是,如果用戶不要在電腦前點擊任何一個警報上的確定按鈕,不要採取任何進一步的行動。因此,此時超時警告設置爲在重定向前1分鐘顯示,當該警告彈出時,計時器暫停,直到用戶單擊按鈕,第二條消息在用戶單擊ok按鈕1分鐘後彈出,然後直到用戶單擊該警告上的按鈕纔會發生重定向。這裏對我最大的問題是,顯然實際會話計時器完全獨立於這些JavaScript計時器,所以如果用戶不在屏幕前,當第一條警告消息彈出說他們有一分鐘會話過期之前和那一分鐘過去了,然後他們看到了消息並單擊確定,他們沒有被重定向,並且認爲他們還剩一分鐘,但會話已經過期,並且我在每個頁面中都有代碼運行,以便它們重定向到索引頁面如果計時器已經過期並且所有會話變量存儲都消失了,所以它們會點擊某個東西,並且無論如何都會被重定向。OnSelectedIndexChanged和AutoPostBack
有沒有更好的方法來做到這一點?我可以使用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>
謝謝。
'alert'阻止UI和任何進一步的腳本執行。所以只需使用其他形式的對話框f.e. jQuery.ui提供的那些... – CBroe
這樣做的伎倆。如果您希望代表添加您的評論作爲答案,我會將其標記爲正確。 – collusionbdbh