ASP.NET核心会话超时



我记得我们在ASP.NET中使用了session.timeout来更改会话超时,如果不更改,则为20分钟。

我试图在Startup.cs中的ASP.NET Core 3.1中更改会话超时,但没有发生任何事情。我为操作员使用Identity,并将"空闲超时"设置为5小时"我认为",但操作员在1-2分钟后注销,并且应该重新登录数百次才能完成一篇文章。

services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromHours(5);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});

我错过了什么??

要在ASP.NET Core中使用会话状态,需要将会话中间件添加到管道中。

重要:中间件的顺序是关键。在UseRouting和UseEndpoints之间调用UseSession。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();
}

更多信息:MSDN

正如您所说,您正在使用标识,然后在services.AddIdentity()之后的startup.cs类中使用以下代码。

public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication().AddCookie(o =>
{
o.ExpireTimeSpan = TimeSpan.FromHours(5);
});
}
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
}

前面的代码设置了一个短超时以简化测试。

中间件的顺序很重要。在UseRouting之后和UseEndpoints之前调用UseSession。请参阅中间件订购。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSession();
}

配置会话状态后,HttpContext.Session可用。

在调用UseSession之前,无法访问HttpContext.Session

在应用程序开始写入响应流后,无法创建带有新会话cookie的新会话。该异常记录在web服务器日志中,不会显示在浏览器中。

最新更新