Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC-识别页面表单身份验证超时_Asp.net Mvc_Asp.net Mvc 3_Controller_Forms Authentication - Fatal编程技术网

Asp.net mvc MVC-识别页面表单身份验证超时

Asp.net mvc MVC-识别页面表单身份验证超时,asp.net-mvc,asp.net-mvc-3,controller,forms-authentication,Asp.net Mvc,Asp.net Mvc 3,Controller,Forms Authentication,我们正在开发MVC3应用程序,以便通过ajax调用和返回PartialView调用我们的大多数操作方法。我们遇到这样一种情况,即我们需要确定是否从表单身份验证超时调用了action方法 public ActionResult LogOn() { // I want to return View("LogOn"); if the call is coming from // Form Authentication time out re

我们正在开发MVC3应用程序,以便通过ajax调用和返回PartialView调用我们的大多数操作方法。我们遇到这样一种情况,即我们需要确定是否从表单身份验证超时调用了action方法

public ActionResult LogOn()
{ 
 // I want to return View("LogOn"); if the call is coming from 
 // Form Authentication time out                       
    return PartialView(Model);
}
这是我的web.config,看起来像:

<authentication mode="Forms">
  <forms loginUrl="~/Home/LogOn" timeout="20" />
</authentication>


感谢您的输入。

服务器无法区分用户正常加载页面和执行页面刷新


有很多方法可以区分常规请求和AJAX请求,但听起来这并不是您想要的。服务器无法区分用户正常加载页面和执行页面刷新


有很多方法可以区分常规请求和AJAX请求,但这听起来不像是您所要求的。没有简单的方法,但是如果您应用Post Redirect Get,我不确定您是否会遇到这个问题。

没有简单的方法,但是如果您应用Post Redirect Get,我不确定您是否会遇到此问题。

如果身份验证cookie超时,您的操作将永远不会受到影响。表单身份验证模块直接重定向到登录页面。从客户端脚本中检测这种情况的一种可能性是在服务于此登录页的控制器操作中设置自定义HTTP头:

public ActionResult LogOn()
{
    var model = ...
    Response.AppendHeader("X-LOGON", "true");
    return View(model);
} 
然后,在执行AJAX请求时,可以在XHR对象上使用
getResponseHeader
方法,以验证是否设置了
X-LOGON
头,这意味着服务器重定向到登录页面。在本例中,在success AJAX处理程序中,您可以显示一些警告消息,通知用户其身份验证会话已超时,需要再次登录,而不是简单地将服务器响应注入DOM或依赖返回的JSON。另一种可能是使用
window.location.href
方法自动将他重定向到登录页面:

$.ajax({
    url: '/home/some_protected_action',
    success: function (data, textStatus, XMLHttpRequest) {
        if (XMLHttpRequest.getResponseHeader('X-LOGON') === 'true') {
            // the LogOn page was displayed as a result of this request 
            // probably timeout => act accordingly
        }
    }
});

如果身份验证cookie超时,您的操作将永远不会被命中。表单身份验证模块直接重定向到登录页面。从客户端脚本中检测这种情况的一种可能性是在服务于此登录页的控制器操作中设置自定义HTTP头:

public ActionResult LogOn()
{
    var model = ...
    Response.AppendHeader("X-LOGON", "true");
    return View(model);
} 
然后,在执行AJAX请求时,可以在XHR对象上使用
getResponseHeader
方法,以验证是否设置了
X-LOGON
头,这意味着服务器重定向到登录页面。在本例中,在success AJAX处理程序中,您可以显示一些警告消息,通知用户其身份验证会话已超时,需要再次登录,而不是简单地将服务器响应注入DOM或依赖返回的JSON。另一种可能是使用
window.location.href
方法自动将他重定向到登录页面:

$.ajax({
    url: '/home/some_protected_action',
    success: function (data, textStatus, XMLHttpRequest) {
        if (XMLHttpRequest.getResponseHeader('X-LOGON') === 'true') {
            // the LogOn page was displayed as a result of this request 
            // probably timeout => act accordingly
        }
    }
});

除非这是ajax,否则在action方法中没有页面。@bzlm:我已经编辑了这个问题。在我们钻研了我们真正想要的东西之后,我意识到我问错了问题!马特,像往常一样,@Darin晶莹剔透。:)除非这是ajax,否则在action方法中没有页面。@bzlm:我已经编辑了这个问题。在我们钻研了我们真正想要的东西之后,我意识到我问错了问题!马特,像往常一样,@Darin晶莹剔透。:)谢谢你的详细回答。我会尝试一下,让你知道。顺便问一下,当涉及到“登录”操作方法时,是否有任何方法可以确定请求来自表单身份验证超时?感谢您提供的详细答案。我会尝试一下,让你知道。顺便问一下,当涉及到“登录”操作方法时,是否有任何方法可以确定请求来自表单身份验证超时?