zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }
  • 相关阅读:
    TreeView checkbox
    学习wcf
    Python导入其他目录的模板
    xcode中如何设置编译后的app路径
    python中package机制的两种实现方式
    Page Object封装思想
    mac xcworkspace xcodebuild
    mac软件管理软件HomeBrew
    app被Rejected 的各种原因翻译
    scan-build static analyze help
  • 原文地址:https://www.cnblogs.com/cheesebar/p/6386479.html
Copyright © 2011-2022 走看看