ASP.NET Core 会话超时

Posted

技术标签:

【中文标题】ASP.NET Core 会话超时【英文标题】:ASP.NET Core Session Timeout 【发布时间】:2020-07-23 12:04:31 【问题描述】:

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

我尝试在 Startup.cs 中更改 ASP.NET Core 3.1 中的会话超时,但没有任何反应。我为操作员使用身份并将空闲超时设置为 5 小时“我认为”,但操作员会在 1-2 分钟后退出,并且应该重新登录数百次才能完成一篇文章。

services.AddSession(options =>

    options.IdleTimeout = TimeSpan.FromHours(5);
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
);

我错过了什么??

【问题讨论】:

您能否提供其余的启动文件。 如果您想更改身份过期时间,只需使用this。 @Mertez;如果有帮助,请将答案标记为已接受,否则请发表评论。 @XAMT 它没有解决我的问题,我登录的身份用户在 2-3 分钟后注销,包括您的回答在内的所有文章都没有解决我的问题 @Mertez;为您的 cookie 添加一个名称,并在超时之前/之后检查它。使用 EditThisCookie chrome 扩展等来检查 cookie。检查过期和会话。会话不能有检查。 【参考方案1】:
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 的新会话。异常记录在网络服务器日志中,不显示在浏览器中。

【讨论】:

【参考方案2】:

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

public void ConfigureServices(IServiceCollection services)
    
        ...

        services.AddAuthentication().AddCookie(o =>
        
            o.ExpireTimeSpan = TimeSpan.FromHours(5);
        );
    

【讨论】:

我已经有了这个services.ConfigureApplicationCookie(options =>...),我还应该使用AddAuthentication().AddCookie(options=>...) 不需要 AddAuthentication().AddCookie(options=>...)。您的会话将在 5 分钟或更早后到期? 我在本地主机上测试,超过了15分钟,但是真实系统中的真实用户报告说,当他们写文章时,或者下线时,他们在几分钟内退出,当我们问什么时是最短时间,他们大约指向 10 分钟 您检查过您的应用程序池的空闲超时吗? 您的意思是应用程序池正在重置?不是应用广泛吗?你的意思是 IIS 中的配置,对吧?【参考方案3】:

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

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

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    app.UseSession();

更多信息: MSDN

【讨论】:

app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseHttpContextItemsMiddleware(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization();应用程序.UseSession(); app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute(); endpoints.MapRazorPages(); );

以上是关于ASP.NET Core 会话超时的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 网站在 30 分钟后超时

什么是 ASP.NET 中的默认会话超时?

IIS 会话超时与 ASP.NET 会话超时

ASP.NET 中的会话超时

ASP.NET 窗体身份验证超时和会话超时

asp.net cookie、身份验证和会话超时