Я хочу перенаправить пользователя на страницу входа в систему, если сессия истекла. Я нашел много способов сделать это, но что является лучшим (или по умолчанию) способом в ASP.Net MVC5 с OWIN? Возможно, это работает из коробки? Но как?Рекомендации по перенаправлению на страницу входа в систему, если сеанс истек
Razor:
- установить переменную сессии после того, как действительный логин
- добавить это в _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