0

是否可以从 mvc 中的 gmail 等浏览器中打开的所有窗口中注销用户。我目前正在使用带有 javascript 的 Ajax 响应来每 15 秒调用一次页面重新加载,但只是想知道 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";
            }
        }
4

1 回答 1

2

您可以尝试检查是否有身份验证 cookie,而不是调用 ajax 请求。那需要将cookie设置HttpOnly为false。

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

当然,该解决方案仅解决用户单击注销的情况。此外,您可以创建另一个持续会话超时的 cookie,并检查该超时是否未过期。

于 2013-07-05T20:09:53.143 回答