初識ASP.NET MVC窗體驗證與許可權過濾---3.自定義過濾器驗證Session超時
阿新 • • 發佈:2019-01-01
為了防止使用者在seesion過期之後進行操作,可以新增自定義過濾器驗證session是否過期,為了便於測試將過期時間設定為1分鐘,在Filters資料夾下新增一個自定義過濾器。
通過上述手段,可以實現session和窗體身份的雙重檢測,避免seesion過期而身份依然存在可以訪問的問題。
當session中的使用者名稱消失,呼叫FormsAuthentication.SignOut()方法清除客戶端的鑑權cookies,然後跳轉到一個新頁面。然後對action新增這個過濾器即可:namespace AuthStudy.Filters { public class CustomFilterAttribute :ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.Session["username"] == null) { FormsAuthentication.SignOut(); filterContext.HttpContext.Response.Redirect("/Home/Test", true); } filterContext.HttpContext.Response.Write("開始時間:" + DateTime.Now.ToString() + "<br/>"); } } }
經過測試,當超過一分鐘後重新整理頁面,跳轉到了指定的提示頁面上。當我們試圖進入需要授權的 /main/index 頁面時,發現頁面跳轉到了登陸頁也就是/Home/index上,瀏覽器顯示的url為http://localhost:38565/Home/Index?ReturnUrl=%2fmain%2findex,說明這個頁面是從/main/index跳轉而來,證實其鑑權cookies已經被清除。[CustomFilter] public class MainController : Controller { [Authorize(Roles = "Manager")] public ActionResult Index() { return View(); } public ActionResult LogOff() { FormsAuthentication.SignOut(); return RedirectToAction("Index", "Main"); } }
通過上述手段,可以實現session和窗體身份的雙重檢測,避免seesion過期而身份依然存在可以訪問的問題。