Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.NETMVC&;ajax表单-如何处理已过期的会话_.net_Ajax_Model View Controller_Session - Fatal编程技术网

.NETMVC&;ajax表单-如何处理已过期的会话

.NETMVC&;ajax表单-如何处理已过期的会话,.net,ajax,model-view-controller,session,.net,Ajax,Model View Controller,Session,我有一个customer filter属性来检查.Net MVC应用程序中的过期会话,该应用程序在标准html表单上运行良好。但是,当我将该属性应用于Ajax表单调用的操作并且会话过期时,它会将登录页面(filter属性在其中重定向上下文)重新加载到Ajax更新容器中。是否有人知道在ajax调用时会话过期时如何使整个页面重定向到登录页面,或者有人知道如何更优雅地处理这种情况?提前谢谢 public class SessionExpiredFilterAttribute : ActionFilte

我有一个customer filter属性来检查.Net MVC应用程序中的过期会话,该应用程序在标准html表单上运行良好。但是,当我将该属性应用于Ajax表单调用的操作并且会话过期时,它会将登录页面(filter属性在其中重定向上下文)重新加载到Ajax更新容器中。是否有人知道在ajax调用时会话过期时如何使整个页面重定向到登录页面,或者有人知道如何更优雅地处理这种情况?提前谢谢

public class SessionExpiredFilterAttribute : ActionFilterAttribute
    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContext ctx = HttpContext.Current;

            // check if session is supported
            if (ctx.Session != null)
            {

                // check if a new session id was generated
                if (ctx.Session.IsNewSession)
                {

                    // If it says it is a new session, but an existing cookie exists, then it must
                    // have timed out
                    string sessionCookie = ctx.Request.Headers["Cookie"];
                    if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
                    {
                        //SessionHelper.AddPageMessage("message", "Your session has expired. Please login to continue");
                        ctx.Response.Redirect("~/Account/Logon");
                    }
                }
            }


            base.OnActionExecuting(filterContext);
        }
    }

我发布了这个问题的原始问题,我想我终于找到了解决方案。虽然它不像我所希望的那样优雅,但它确实有效(这比我目前发现的要多)。解决方案围绕OnBegin AjaxOption和一些Jquery。我的ActionLink(它也可以是一个Ajax.BeginForm,适用于)如下所示

<%= Ajax.ActionLink("Do Ajax Function", "AjaxAction", new { }, new AjaxOptions { OnBegin="check_session", OnSuccess = "ajaxSuccess", UpdateTargetId = "update_container"}, new { })%>  
最后一部分是指定为OnBegin处理程序的
check\u会话
函数。jQueryAjax调用点击会话检查操作并检查响应。如果响应为“True”(表示会话已过期),则会将页面位置设置回主页(在本例中为google)

功能检查\u会话(){
var url='';
//获取检查会话
$.ajax({
url:url,
成功:功能(数据){
//警报(数据);
如果(数据==“真”){
document.location=”http://www.google.com";
}
},
错误:函数(){alert(“加载ajax会话检查时出现问题”);}
});
}
如果使用这种方法,有几件事需要记住。 首先,这将异步运行。如果您有正在调用的数据敏感代码,则仍然需要对会话执行服务器端检查。如果会话在ajax调用期间过期,则此代码仅用于重定向到登录页面(或主页)。 第二件事是,
check\u session
函数需要连接到所有Ajax调用的
OnBegin
事件中。
如果有人对改进这种方法有任何建议,我很乐意听取他们的意见。我希望这能帮助一些人。

我发布了这方面的原始问题,我想我终于找到了解决方案。虽然它不像我所希望的那样优雅,但它确实有效(这比我目前发现的要多)。解决方案围绕OnBegin AjaxOption和一些Jquery。我的ActionLink(它也可以是一个Ajax.BeginForm,适用于)如下所示

<%= Ajax.ActionLink("Do Ajax Function", "AjaxAction", new { }, new AjaxOptions { OnBegin="check_session", OnSuccess = "ajaxSuccess", UpdateTargetId = "update_container"}, new { })%>  
最后一部分是指定为OnBegin处理程序的
check\u会话
函数。jQueryAjax调用点击会话检查操作并检查响应。如果响应为“True”(表示会话已过期),则会将页面位置设置回主页(在本例中为google)

功能检查\u会话(){
var url='';
//获取检查会话
$.ajax({
url:url,
成功:功能(数据){
//警报(数据);
如果(数据==“真”){
document.location=”http://www.google.com";
}
},
错误:函数(){alert(“加载ajax会话检查时出现问题”);}
});
}
如果使用这种方法,有几件事需要记住。 首先,这将异步运行。如果您有正在调用的数据敏感代码,则仍然需要对会话执行服务器端检查。如果会话在ajax调用期间过期,则此代码仅用于重定向到登录页面(或主页)。 第二件事是,
check\u session
函数需要连接到所有Ajax调用的
OnBegin
事件中。
如果有人对改进这种方法有任何建议,我很乐意听取他们的意见。我希望这对某人有所帮助。

我自己也在寻找答案。我自己也在寻找答案。
function check_session(){

        var url = '<%= Url.Action("CheckAjaxSessionExpired", "Account") %>';


        //GET CHECK SESSION
        $.ajax({
            url: url,
            success: function(data) {

                //alert(data);

                if (data == "True"){
                    document.location = "http://www.google.com";
                }
            },
            error: function() { alert("there was a problem loading the ajax session check"); }
        });
    }