2013-07-05 48 views
0

是否有可能從mvc中的Gmail等瀏覽器中打開的所有窗口中註銷用戶。我目前正在使用JavaScript的Ajax響應每隔15秒在頁面中調用一次重新加載,但只是好奇地想知道是否有一些內置的mvc函數可以做到這一點。我的代碼如下,如果這是唯一的方法,即某些定時響應根據您的經驗,最佳定時器間隔是多少?如果在一個頁面上登錄,從所有頁面註銷用戶mvc

在我的共享佈局窗口

@if (User.Identity.IsAuthenticated) 
    { 
    <script type="text/javascript"> 
     window.onload = function(){ 
      setInterval(function() { loadchkDoc() }, 15000); 
     } 
     function loadchkDoc(){ 
      var xmlhttp; 
      if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp = new XMLHttpRequest(); 
      } 
      xmlhttp.open("GET", "/Home/chkDoc", true); 
      xmlhttp.send(); 
      xmlhttp.onreadystatechange = function() { 
       if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
        var k = xmlhttp.responseText; 
        if (k == "gotologin") { 
         location.reload(); 
        } 
       } 
      } 
     } 
    </script> 
    } 

在我家的控制器

public string chkDoc() 
     { 
      if (User.Identity.IsAuthenticated) 
      { 
       return "authorized"; 
      } 
      else 
      { 
       return "gotologin"; 
      } 
     } 
+0

沒有內置的功能來做到這一點。您可以看看SignalR,作爲使用間隔計時器的替代方法。 – Rob

+0

謝謝Robs我會看看它。 –

回答

2

改爲調用Ajax請求,你可以嘗試檢查是否有身份驗證cookie。這需要將Cookie HttpOnly設置爲false。

function checkSession() { 
    if (!$.cookie('.ASPXAUTH')) { 
     logout(); 
    } 
    else { 
     setTimeout(checkSession, 15); 
    } 
} 

當然,該解決方案僅解決用戶單擊註銷時的情況。此外,您可以創建另一個cookie來保持會話超時,並檢查該超時是否已過期。

+0

雖然它能正常工作,但在使用此功能時遇到了Jquery錯誤。 '未捕獲的類型錯誤:對象函數(選擇器,上下文){jQuery.fn.init(selector,context,rootjQuery);返回新的jQuery.fn.init(選擇器,上下文);}}}} \t}沒有方法「cookie」 –

+0

是的,因爲你必須下載jquery.cookie插件:https://github.com/carhartl/jquery-cookie –

相關問題