mvc中ajax请求session超时处理

1、ajax请求没有权限获取session的状态,一般页面请求如果session超时,则自动跳转到登录页面。但是ajax则不能,

在这里我们使用前段ajax的complete方法进行判断session状态并跳转到登录页面;

使用ajaxSetup设置全局ajax的complete变量
$.ajaxSetup({
    contentType: "application/x-www-form-urlencoded;charset=utf-8",
    complete: function (XMLHttpRequest, textStatus) {
        var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");  // 通过XMLHttpRequest取得响应头,sessionstatus,
        if (sessionstatus == "timeout") {
            // 如果超时就处理 ,指定要跳转的页面
            window.location.href = "/Default/Login";
        }
    }
});

 

 

2、后台请求,在ajax请求后台方法前会先执行OnActionExecuting方法,所以我们在这个方法里面进行判断session是否超时,并且终止请求。需要注意:当filterContext.Result 不为空时,才能终止请求(详情查阅地址:http://www.cnblogs.com/luconsole/p/4346669.html);

        //在OnActionExecuting进行判断session超时,并终止请求
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
//如果session里的userInfo为空,则代表session已经超时。 var user = System.Web.HttpContext.Current.Session["userInfo"] as LoginUser; if (user == null || string.IsNullOrEmpty(user.ID)) { if (filterContext.HttpContext.Request.IsAjaxRequest()) //判断是ajax请求 {
//这里设置session的超时状态 Response.Headers.Add("sessionstatus", "timeout"); //如果session超时了,终止请求。 filterContext.Result = Content("session timeout"); } else { Response.Redirect(FormsAuthentication.LoginUrl); } } else { //获取按钮列表 if (BtnElem != null) { foreach (var item in BtnElem) { ViewData[item["NAME"]] = item["ARRAY"]; } } if (!string.IsNullOrEmpty(Convert.ToString(Request.QueryString["MenuID"]))) { GetUserElemAuth(Request.QueryString["MenuID"].ToString()); } base.OnActionExecuting(filterContext); } }

 

posted @ 2017-04-20 19:39  溪水石子  阅读(158)  评论(0)    收藏  举报