2011-06-09 45 views
2

我使用setTimeout來調用MVC操作來嘗試保持用戶表單身份驗證的活動狀態。使用Javascript setTimeout調用MVC操作來保持活動表單身份驗證

當我正常調用此代碼(即不使用setTimeout)時,它會保持表單身份驗證活着。

在setTimeout中調用時,它不會。

我的問題是爲什麼當通過setTimeout調用時不工作?

$(document).ready(function() { 

    DoKeepAlive(); //simple test when page loads....does keep forms auth alive 
}); 


var timeout= 0; 
timeout= setTimeout(validationPrompt, 2 * 60 * 1000); 

function validationPrompt() { 

    var answer = confirm("Your session will timeout in less than a minute. Click OK to stay logged in, and reset the timout period.") 
    if (answer) { 

     DoKeepAlive();  //when called in here by setTimeout, does NOT keep forms auth alive 

     //re-set the 10 minutes count 
     clearTimeout(timeout); 
     timeout= setTimeout(validationPrompt, 2 * 60 * 1000); 
    } 
    else { 
     var URL = "<%= Url.Content("~/Account/Logoff") %>" 
     window.location = URL; 
    } 
} 

function DoKeepAlive(){ 

     var URL = "<%= Url.Content("~/Account/ValidateAuthentication") %>" 
    $.post(
      //"../../Account/ValidateAuthentication",  
      URL, 
      function(data) { 

      } 
     ); 

} 
+1

缺少一些代碼?什麼是「promptUserTimeoutId」?另外,爲什麼你將「timeout」設置爲「validationPrompt」函數? – 2011-06-10 07:43:17

+0

對不起亞歷杭德羅,我試圖分類我的代碼,並把它弄得一團糟 - 現在應該更清楚了嗎? – ozz 2011-06-10 08:36:23

回答

1

經過多次來回發酵,我發現今天我使用的服務器上的時間慢了3分鐘。在這個thread觸發幫助我。

1

很難說爲什麼你的代碼不工作。我會首先嚐試簡化它:

<script type="text/javascript"> 
    window.setInterval(function() { 
     var answer = confirm("Your session will timeout in less than a minute. Click OK to stay logged in, and reset the timout period."); 
     if (answer) { 
      $.post('<%= Url.Action("ValidateAuthentication", "Account") %>'); 
     } else { 
      window.location.href = '<%= Url.Action("Logoff", "Account") %>'; 
     } 
    }, 2 * 60 * 1000); 
</script> 
+0

嗨達林,感謝您的建議 - 同樣的結果,但它不起作用在我的生活環境:-( – ozz 2011-06-10 09:17:15

+0

@james,你看到AJAX請求被髮送?它們是否成功?您的表單身份驗證令牌的超時在web.config中高於'2 * 60 * 1000'? – 2011-06-10 09:18:27

+0

他們確實發送了,但是我得到的響應是我的登錄頁面,所以它看起來像一個新的請求,沒有經過身份驗證,然後重定向到登錄。超時比配置更高 – ozz 2011-06-10 09:26:31

1

嘗試把timeout= setTimeout(validationPrompt, 2 * 60 * 1000);$(document).ready

+0

順便說一句,你等了很多秒,看看它是否真的有用嗎?這是一個很長的時間,等待,直到你找到:) – Shrinath 2011-06-13 13:21:44

+0

大聲笑,我現在使用的時間要短得多:-) – ozz 2011-06-13 13:25:06

+0

嘗試了你的建議,但它並沒有幫助,無論如何。 – ozz 2011-06-13 13:32:06

相關問題