【问题标题】:ASP.NET Core Session TimeoutASP.NET Core 会话超时
【发布时间】: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。检查过期和会话。会话不能有检查。

标签: asp.net asp.net-core session asp.net-identity session-cookies


【解决方案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(); });
    猜你喜欢
    • 2022-08-17
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2011-08-12
    相关资源
    最近更新 更多