以前我们总是会写一个基类也叫父类来判断session是否已过期然后跳转到指定的错误页面或者登陆界面,然后让所有的页面都继承这个基类,但是当我们应用到MVC项目中时,发现该方法并不会起作用。这时我们可以这么做:
1.建一个类,如下
using System; using System.Web.Mvc; using System.Web.Routing; namespace CheckInManagerSystem.Controllers { public class CheckLogin : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.Session != null) { if (filterContext.HttpContext.Session.IsNewSession) { var sessionCookie = filterContext.HttpContext.Request.Headers["Cookie"]; if ((sessionCookie != null) && (sessionCookie.IndexOf("ASP.NET_SessionId", StringComparison.OrdinalIgnoreCase) >= 0)) { filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { Controller = "Account", Action = "LogOff" }));//这里是跳转到Account下的LogOff,自己定义 } } } } } }
2.在每个用到session的Action前增加这个[CheckLogin()],如
[CheckLogin()] public ActionResult Details(int userid) { ViewDataLoad(); return View(_context.GetUserById(userid)); }
这样就OK啦!不会再因为session过期而报红页面了!
时间: 2024-10-11 20:03:05