1. 程式人生 > >MVC過濾器處理Session過期

MVC過濾器處理Session過期

use des onf prot ews att area attrs empty

一、自定義一個Action過濾器

 public class CheckSession: ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            object[] attrs = filterContext.ActionDescriptor.GetCustomAttributes(typeof(NoFilter), true);
            if (attrs.Length == 1
){} else { if (filterContext.HttpContext.Session != null) { if (filterContext.HttpContext.Session.IsNewSession) { var loginUser = filterContext.HttpContext.Session["User"];
if (loginUser == null) { if (!filterContext.HttpContext.Request.IsAjaxRequest()) { filterContext.Result = new RedirectResult("/GY_User/LoginIndex"); }
else { filterContext.Result = new JsonResult { Data = new { Success = false, Message = string.Empty, Redirect = "/GY_User/LoginIndex" } }; } } } } } // base.OnActionExecuting(filterContext); } } //不想使用全局過濾器可使用此標簽 public class NoFilter:Attribute { public NoFilter() { } }

二、註冊全局過濾器

在FilterConfig中添加

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
           // filters.Add(new HandleErrorAttribute());
            filters.Add(new CheckSession());
        }

在Global.asax中添加

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        }

三、在不想使用全局過濾器的Action上添加[NoFilter]標簽

四、設置Session過期時間

Session["User"] = jsonData.data;
 Session.Timeout = 3;

MVC過濾器處理Session過期