-2
如果會話過期,我想將用戶重定向到登錄頁面。我發現了很多方法來做到這一點,但什麼是與OWIN的ASP.Net MVC5最好(或默認)的方式? 也許它開箱即用?但是如何?會話過期後重定向到登錄頁面的最佳做法
剃刀:
- 設置會話變量有效登錄後
- 在_Layout.cshtml補充一點:
@if (Session["IsLogin"] == null)
{
Session.Abandon();
Response.Redirect("~/LoginControllerName/LoginActionName");
}
的Global.asax:
- 這是可能使用這兩種方法,但我不知道如何。
protected void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
}
protected void Session_End(object sender, EventArgs e)
{
// Code that runs when a session is expired
}
我目前的解決方案:
- 所有的控制器繼承
BaseController
- 我用OnAuthorizationAttribute因爲重定向如果它是一個非公開的頁面應該只執行。
public abstract class BaseController : Controller
{
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (this.Session["RedirectAfterLogin"] == null)
{
var isAnonymousAllowed = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true);
if (!isAnonymousAllowed)
{
this.Session["RedirectAfterLogin"] = this.Request.Url?.ToString();
filterContext.Result = this.RedirectToAction("LoginActionName", "LoginControllerName");
}
}
base.OnAuthorization(filterContext);
}
}
- 後重定向註銷用戶:
if (this.AuthenticationManager == null)
{
this.SetAuthenticationManager(this.HttpContext?.GetOwinContext()?.Authentication);
}
this.AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
- 有效的登錄設置會話變量之後:
this.Session["RedirectAfterLogin"] = this.Request.Url?.ToString();
這看起來像我的配置。我另外設置了'''SlidingExpiration = true''和 '''ExpireTimeSpan = TimeSpan.FromMinutes(30)'''。但在我的web.config中,我有一個不同的會話超時'''''' –
cSteusloff