【发布时间】:2019-11-19 16:46:00
【问题描述】:
如何在 ASP.NET Core MVC 中从控制器添加会话超时?
我正在开发一个 ASP.NET Core MVC Web 应用程序,我需要从控制器的操作方法中添加会话超时。
【问题讨论】:
标签: c# asp.net-core .net-core asp.net-core-mvc session-state
如何在 ASP.NET Core MVC 中从控制器添加会话超时?
我正在开发一个 ASP.NET Core MVC Web 应用程序,我需要从控制器的操作方法中添加会话超时。
【问题讨论】:
标签: c# asp.net-core .net-core asp.net-core-mvc session-state
在 ConfigureServices 中配置会话
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(120);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
【讨论】:
您可以尝试自定义注册会话的middleware filter attribute,并使用以下内容装饰控制器或操作:
public class SessionPipeline
{
public void Configure(IApplicationBuilder applicationBuilder)
{
var options = new SessionOptions
{
IdleTimeout = TimeSpan.FromSeconds(5),
};
applicationBuilder.UseSession(options);
}
}
[MiddlewareFilter(typeof(SessionPipeline))]
public class HomeController : Controller
{
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddSession();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//...more middlewares
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
【讨论】: