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 会话超时的主要内容,如果未能解决你的问题,请参考以下文章