如何使用ajax检查我的MVC会话是否过期?

时间:2014-12-18 11:07:02

标签: javascript ajax asp.net-mvc

我的web.config设置得恰到好处并且工作正常但只有当用户执行httpPost时才会识别它应该重定向:

  <system.web>
<sessionState mode="InProc" timeout="5" />
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
<authentication mode="Forms">
  <forms loginUrl="~/Login/Login"></forms>
</authentication>

我在_Layout中设置了此代码:

var _redirectUrl = '@Url.Action("Logout", "Login")';
$(document).ajaxSuccess(function (event, request, settings, xhr, props, jqXHR) {
            if (jqXHR.status == 401) {
                window.location.href = _redirectUrl;
            }
        });

jqXHR.status在我的浏览器debuger中返回undefined,我也尝试过props.status并且仍然未定义。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

对超时会话的请求将导致http状态302(已找到),从而导致透明的重定向。因此jQuery不会自动处理这个问题。您可以让服务器返回http状态401(未授权)而不是重定向。这是一篇包含您可以复制的代码的文章:

http://blogs.perficient.com/microsoft/2014/02/gracefully-handle-mvc-user-session-expiration-in-javascript/