mvc 实现超时弹窗后跳转

为了实现保持登录状态,可以用cookie来解决这一问题

假设过期时间为30分钟,校验发生在服务器,借助过滤器,可以这样写

    public class PowerFilter : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            var cookie = HttpContext.Current.Request.Cookies["loginInfo"];
            if(null == cookie)
            {
                filterContext.Result = new RedirectResult("/admin/login/index");
            }
            else
            {
                cookie.Expires = DateTime.Now.AddMinutes(30);
                HttpContext.Current.Response.Cookies.Remove("loginInfo");
                HttpContext.Current.Response.Cookies.Add(cookie);
            }
        }
    }

但是页面直接跳转了,也没有一个提示,显得不是很友好,可以这样

    public class PowerFilter : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            var cookie = HttpContext.Current.Request.Cookies["loginInfo"];
            if(null == cookie)
            {
                filterContext.Result = new ContentResult()
                {
                    Content = string
                    .Format("<script>alert('登录超时,请重新登录');location.href='{0}'</script>","/admin/login/index")
                };
            }
            else
            {
                cookie.Expires = DateTime.Now.AddMinutes(30);
                HttpContext.Current.Response.Cookies.Remove("loginInfo");
                HttpContext.Current.Response.Cookies.Add(cookie);
            }
        }
    }
}

但是,假如是ajax请求呢?

    public class PowerFilter : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            var cookie = HttpContext.Current.Request.Cookies["loginInfo"];
            if(null == cookie)
            {
                if(!filterContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.Result = new ContentResult()
                    {
                        Content = string
                                 .Format("<script>alert('登录超时,请重新登录');location.href='{0}'</script>","/admin/login/index")
                    };
                }
                else
                {
                    filterContext.Result = new JsonResult()
                    {
                        Data = new { logoff = true,logurl = "/admin/login/index" },
                        ContentType = null,
                        ContentEncoding = null,
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet
                    };
                }
            }
            else
            {
                cookie.Expires = DateTime.Now.AddMinutes(30);
                HttpContext.Current.Response.Cookies.Remove("loginInfo");
                HttpContext.Current.Response.Cookies.Add(cookie);
            }
        }
    }

 

posted @ 2017-02-10 15:16  行走即歌  阅读(1438)  评论(0编辑  收藏  举报


感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接