1. 程式人生 > >初識ASP.NET MVC窗體驗證與許可權過濾---3.自定義過濾器驗證Session超時

初識ASP.NET MVC窗體驗證與許可權過濾---3.自定義過濾器驗證Session超時

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