簡體   English   中英

Asp.NET MVC 4中的會話

[英]Sessions in Asp.NET MVC 4

誰能告訴我如何在asp.net MVC 4中處理會話。我知道此Session變量,並且知道如何使用它。

Session["login"] = true; //We can use it in controller to check the whether user logged in or not.

上面的代碼片段足以處理小型Web應用程序上的會話。 但是,如果我有許多控制器和動作,而我正在處理大型應用程序,在這種情況下,我將無法在每個動作中使用會話變量。

有什么通用的地方可以檢查會話變量或任何其他解決方案?

第一種方式:

我曾經寫過一個Base Controller類,所有其他Controller都繼承自該類,需要在訪問之前進行身份驗證:

public class DefaultController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Session["User"] == null)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = 403;
                filterContext.Result = new JsonResult { Data = "LogOut", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
            }
            else
                filterContext.Result = RedirectToAction("Login", "Account");
        }
        else
        {
            //base.Execute(filterContext.RequestContext);
        }
    }
}

並從Base Controller繼承用戶必須登錄的用戶:

public class LeaveController : DefaultController
{

}

另一種方法是編寫您自己的授權屬性。

請參閱asp.net mvc中的過濾器和屬性

第二種方式:

這是自定義過濾器屬性的示例,創建從ActionFilterAttribute繼承的類:

public class SessionTimeoutAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Session["someValueYouLookFor"] == null)
        {
            filterContext.Result = new RedirectResult("~/Home/Index"); // redirect to login action
        }
        else
        {
            // continue normal execution 
        }
    }
}

並將其放在Controller或Action上:

[SessionTimeout]
public ActionResult Index()
{


}

當然,如果您使用的是MVC 5,則可以使用身份驗證過濾器。

以最簡單的方式,您可以擁有一個baseController,所有其他控制器都應繼承該控制器,並且在baseController中,您可以覆蓋該OnActionExecuting事件,以驗證會話是否存在。

對於前。

  protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (Convert.ToBoolean(Session["login"]))
            {
                //Authenticated
            }
            else
            { 
                //Kick to login page
            }
        }

所有其他控制器應繼承此baseController

 public class HomeController : BaseController
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Test()
        {
            return View();
        }
    }

這樣,在您的操作方法開始執行之前,將通過baseController的OnActionExecuting事件對其進行驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM