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);
                }
            }
        }
  • 相关阅读:
    mysql索引
    数据库修复
    数据库取值 三级分类后台遍历
    创建数据库!
    mysql按条件 导出sql
    nodejs 简单安装环境
    C++ 性能剖析 (一)
    C++ 性能剖析 (二):值语义 (value semantics)
    JavaScript Nested Function 的时空和身份属性
    C++ Reference 的“三位一体”诠释
  • 原文地址:https://www.cnblogs.com/cheesebar/p/6386479.html
Copyright © 2011-2022 走看看