مدیریت تاریخ انقضاء Session با استفاده از صفت ها در MVC

د راین مقاله قصد داریم آموزشی برای اداره کردن تاریخ انقضاء با استفاده از صفات در MVC را بدهیم.

مدیریت تاریخ انقضاء Session با استفاده از صفت ها در MVC

مدیریت Session به عنوان  یک کار مشترک در همه برنامه های وب به کار میرود در این قسمت از آموزش قصد داریم به مدیریت Session با استفاده از صفات در MVC بپردازیم.

در اکثر برنامه کاربردی اطلاعات کاربر را درSesstion بعد از لاگین قرار میدهیم.  هنگامی که میخواهیم از Sesstion استفاده کنیم حتما باید چک کنیم که ورودی که از session میاید تهی (null ) نباشد و اگر Null بود باید به صفحه Login هدایت کنیم  و بعد از آن که با موفقیت لاگین شد کاربر را به صفحه مرود نظر هدایت میکردیم.

توضیحی که در بالا گفته شد به صورت کد در پایین آورده شده است :

    public class SessionExpire : ActionFilterAttribute  
    {  
        public override void OnActionExecuting(ActionExecutingContext filterContext)  
        {  
      
      
            if (HttpContext.Current.Session["UserInfo"] == null)  
            {  
                FormsAuthentication.SignOut();  
               filterContext.Result =  
              new RedirectToRouteResult(new RouteValueDictionary   
                {  
                 { "action", "Index" },  
                { "controller", "Login" },  
                { "returnUrl", filterContext.HttpContext.Request.RawUrl}  
                 });  
      
                return;  
            }  
        }  
      
    }  

 

همان طور که مشاهده میکنید کلاس Session Expire از  ActionFilterAttribute ارث بری کرده است در واقع هنگامی که بخواهیم یک فیلترینگ دستی در MVC ایجاد کنیم از این صفت ارث بری خواهیم کرد که متد OnActionExecuting برای ادراه کردن session به کار میرود.

حال یک کنترل ایجاد کرده که کلاس از SessionExpire را به عنوان صفت استفاده کرده ایم

   [SessionExpire]
        public class ManageAccountController : Controller
        {
            public ActionResult Index()
            {

                return View();
            }
        } 

 

حال قصد داریم اگر sesstion ، تهی (null ) بود کاربر را به صفحه لاگین هدایت کنیم و مقدار url را در viewBag ذخیره کنیم.

   public class LoginController :Controller
        {

            public ActionResult Index(string returnUrl)
            {
                ViewBag.ReturnUrl = returnUrl;
                return View();
            }
        } 
    } 

حال یک view از متد index ساخته و Html.BeginFor را به صورت زیر پر میکنیم:

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) // in Index.cshtml   

 

سپس برای ارسال Login Contrioll توسط  retrun Url از متد Index از یک نوع post ایجاد میکنیم.

 

[HttpPost]  
public ActionResult Index(Model objUser, string returnUrl)   
{  
    ViewBag.ReturnUrl = returnUrl;  
      
    if (ModelState.IsValid)  
    {  
       FormsAuthentication.SetAuthCookie("Username", false);  
        return RedirectToLocal(returnUrl);  
    }  
    else  
    {  
        return View();  
    }  
}  
  
public ActionResult RedirectToLocal(string returnUrl)  
{  
    if (Url.IsLocalUrl(returnUrl))  
    {  
  
        return Redirect(returnUrl);  
    }  
    else  
    {  
        return RedirectToAction("Index", "Home");  
    }  
}