【发布时间】: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