ASP.NET Core 会话超时

6

我记得在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;
});

我漏掉了什么?


1
你能提供你的启动文件的其余部分吗? - jgetner
如果您想更改身份过期时间,只需使用此链接 - Rena
1
@Mertez;如果答案有帮助,请将其标记为已接受,或者在if-else中进行评论。 - XAMT
@XAMT 这并没有解决我的问题,我的已登录身份的用户在2-3分钟后注销,包括您的答案在内的所有文章都没有解决我的问题。 - Mertez
@Mertez;在cookie中添加一个名称,并在超时前/后检查它。使用EditThisCookie Chrome扩展程序并像这样检查cookie。检查过期和会话。会话不得进行检查。 - XAMT
3个回答

1

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

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

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

更多信息: MSDN


1
app.UseHttpsRedirection(); app.UseStaticFiles();app.UseHttpContextItemsMiddleware();app.UseRouting();app.UseAuthentication(); app.UseAuthorization();app.UseSession();app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); endpoints.MapRazorPages(); }); - Mertez

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


0

根据您所说,您正在使用身份验证,那么请在services.AddIdentity()之后,在您的startup.cs类中使用以下代码。

public void ConfigureServices(IServiceCollection services)
    {
        ...

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

我已经有了这个 services.ConfigureApplicationCookie(options =>...),我是否仍然需要使用 AddAuthentication().AddCookie(options=>...) - Hassan Faghihi
不需要AddAuthentication().AddCookie(options=>...)。你的会话将在5分钟或更早时过期? - Zubair Rana
1
你检查过应用程序池的空闲超时时间了吗? - Zubair Rana
我如何配置应用程序池的空闲超时时间?@ZubairRana - Hamza Khanzada
1
我怎么才能确定这是由于应用程序池还是会话超时引起的呢? - Hamza Khanzada
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接