ASP.NET核心会话超时

aelbi1ox  于 2022-11-19  发布在  .NET
关注(0)|答案(3)|浏览(243)

我记得我们在ASP.NET中使用了session.timeout来更改会话超时,如果不更改的话,会话超时是20分钟。
我尝试在Startup.cs中更改ASP.NET Core 3.1中的会话超时,但没有任何React。我为操作员使用标识,并将空闲超时设置为5小时“我认为”,但操作员在1-2分钟后注销,并应重新登录数百次才能完成一篇文章。

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

我错过了什么?

xcitsw88

xcitsw881#

为了在ASP.NET核心中使用会话状态,您需要将会话中间件添加到管道中。

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

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

更多信息:MSDN

igetnqfo

igetnqfo2#

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

public void ConfigureServices(IServiceCollection services)
    {
        ...

        services.AddAuthentication().AddCookie(o =>
        {
            o.ExpireTimeSpan = TimeSpan.FromHours(5);
        });
    }
7fhtutme

7fhtutme3#

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服务器日志中,不会显示在浏览器中。

相关问题