mvc 实现超时弹窗后跳转

2018-06-17 22:02:47来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

为了实现保持登录状态,可以用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);
            }
        }
    }

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员(

下一篇:【VB.NET】利用 ZXing.Net 生成二维码(支持自定义LOGO)