Вот как я реализовал Session в своем проекте ASP .NET CORE:
Создайте фильтр SessionTimeout:
public class SessionTimeout : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.HttpContext.Session == null ||!context.HttpContext.Session.TryGetValue("UserID", out byte[] val))
{
context.Result =
new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Pages",
action = "SessionTimeout"
}));
}
base.OnActionExecuting(context);
}
}
Зарегистрируйте этот фильтр в файле Startup.cs:
В вашем методе ConfigureServices:
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(10);
});
В вашем Configure добавьте:
app.UseSession();
И, наконец, украсьте свой класс / метод с помощью фильтра как:
[SessionTimeout]
public class DashboardController : Controller
Чтобы уничтожить ваш сеанс на основе события выхода из вашего представления:
public IActionResult Logout()
{
HttpContext.Session.Clear();
return RedirectToAction("Login", new { controller = "Pages" });
}