【问题标题】:Return a 401 to the JavaScript when the session has expired会话过期时向 JavaScript 返回 401
【发布时间】:2011-10-04 06:16:24
【问题描述】:

我有一个使用表单身份验证的 ASP.NET MVC 3 应用程序。

表单身份验证已在web.config中设置如下。

<authentication mode="Forms">
  <forms loginUrl="Session/LogIn"
         protection="All"
         timeout="60"
         slidingExpiration="true"
         />
</authentication>

当会话到期并且我单击导致常规 HTTP 调用的内容时,会显示 会话/登录 页面。这一切都很好。

但是,当会话到期并且我单击导致 AJAX 调用的内容时,Session/Login 页面嵌入在 AJAX 调用将要更新的 HTML 元素中。即,如果 AJAX 调用是更新 id 为 123 的 div,并且由于会话已过期,则登录表单将放置在该 div 中。

我想做的是在会话过期时检查 ASP.NET MVC 3 应用程序。如果有,并且调用是 AJAX 调用,那么我想不返回任何内容作为响应,并将返回状态码设置为 401。

在 JavaScript(使用 jQuery)中,我可以查找未经授权的状态码 401,并将用户重定向到登录页面。像这样的:

$(document).ajaxError(function(event, response, settings, error) {
    if (response.status == 401) {
        window.document.location = "Login";
    }
});

所以我正在寻找一种可靠的方法来检查会话是否在 C# 端过期,并返回一个带有状态代码 401 的空响应,然后 JavaScript 可以干净地处理。

【问题讨论】:

    标签: javascript jquery asp.net asp.net-mvc


    【解决方案1】:

    在返回登录页面(Sesssion/LogIn)的动作中检查这是否是一个ajax请求,

    if(Request.IsAjaxRequest)
    

    如果返回 Content("&lt;meta http-equiv='refresh' content='0'&gt;"); 而不是 View()

    【讨论】:

    • 或者只返回状态码 401 并结束响应而不是内容字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多