gpt4 book ai didi

c# - session 过早退出

转载 作者:行者123 更新时间:2023-12-03 05:18:29 26 4
gpt4 key购买 nike

我将 ASP.NET Core 2.1 与 Microsoft Identity 结合使用,用户提示说,他们在仅大约 30 分钟不活动后就不断被重定向到登录屏幕。我已将 ExpireTimeSpan 设置为 60 分钟,但它永远不会持续这么长时间。有什么建议吗?

这是我在 Startup.cs 文件中的内容:

public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IRFDbRepository, RFDbRepository>();
var connection = _configuration.GetConnectionString("RFDbConnection");
services.Configure<ConnectionStrings>(_configuration.GetSection("ConnectionStrings"));
services.AddDbContext<IdentityDbContext>(options => options.UseSqlServer(connection));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddRazorPagesOptions(options =>
{
options.AllowAreas = true;
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
});

services.AddIdentity<User, UserRole>().AddDefaultTokenProviders();
services.AddTransient<IUserStore<User>, UserStore>();
services.AddTransient<IRoleStore<UserRole>, RoleStore>();

services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/Identity/Account/Login";
options.LogoutPath = "/Identity/Account/Logout";
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
options.SlidingExpiration = true;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IRFDbRepository rFDbRepository)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}

loggerFactory.AddFile(_configuration.GetValue<string>("Logging:LogFile"));
app.UseStaticFiles();

app.UseAuthentication();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "ActionApi",
template: "api/{controller}/{action}/{id?}");
});
}

最佳答案

我终于找到了这个问题的根源。

ASP.NET Core 2.1 中的身份存在一个问题,如果您实现了自己版本的 UserStore 但没有实现 IUserSecurityStampStore,则将跳过有关安全标记的大多数功能。

当您调用 AddIdentity() 时,它每 30 分钟对 securityStamp 进行一次验证检查。

这会导致令人困惑的行为:即使 cookie 没有过期,用户也会在 30 分钟后注销。

显然,ASP.NET Core 2.2 中已对此进行了修复,更多详细信息请参见此处

https://github.com/aspnet/Identity/issues/1880

同时,您可以让您的 UserStore 实现 IUserSecurityStampStore,或者执行我现在所做的快速修复,将其添加到您的startup.cs,这将故障间隔时间从 30 分钟增加到 10 小时。

services.Configure(o => o.ValidationInterval = TimeSpan.FromHours(10));

关于c# - session 过早退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com