2013-07-05 49 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 –

相关问题