ASP.NET Core 6项目在10~20分钟后自动注销



我只是想知道为什么我会因为提问而被禁止!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!???????????????????????????????????????????

此问题仅存在于联机主机中,而不存在于本地主机中。

我观看了本教程,并对我的项目进行了身份验证和授权。在localhost上,这是可以的,但当我切换到带有Plesk的Windows主机(我认为是IIS,但我不确定)的联机主机时,无论我是否使用IsPersistent(保持用户登录),用户都会在10~20分钟后注销。

builder.Services.AddAuthentication("MyAuth").AddCookie("MyAuth", options =>
{
options.Cookie.Name = "MyAuth";
options.LoginPath = "/login";
options.LogoutPath = "/logout";
options.ExpireTimeSpan = TimeSpan.FromDays(30);
});
List<Claim> claims = new()
{
new Claim(ClaimTypes.NameIdentifier, user.ID.ToString()),
};
ClaimsIdentity identity = new(claims, "MyAuth");
ClaimsPrincipal principal = new(identity);
AuthenticationProperties properties = new() { IsPersistent = login.RememberMe };
await HttpContext.SignInAsync("MyAuth", principal, properties);

我尝试了本教程中的所有内容,但都不起作用。我不知道如何修复它。我搜索了很多,大部分教程都是针对ASP.NET Framework的,而不是针对ASP.NET Core的。

我尝试过的:

  1. 添加选项。SlidingExpiration=true;到AddAuthentication()。AddCookie
  2. builder.Services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromHours(10));添加到程序.cs
  3. 将Utc过期到AuthenticationProperties

更新:我找到了这个,但不知道该怎么办?我找不到那些设置是Plesk。

IIS服务器上的神秘注销

尽管有所有这些设置,您可能会体验到用户正在登录几分钟后离开(如20分钟)。很可能你抓不到在开发应用程序时本地上的这种行为。是的与IIS上的某些设置相关。

要修复此行为,首先需要转到的高级设置应用程序池。您将看到一个名为"空闲超时"的设置(分钟)",并且必须设置为0。其默认值为20分钟。这意味着如果在20分钟内没有新的请求,工作进程将关闭向下

当应用程序重新启动或工作进程重新启动时,如果密钥与保存在存储器中的认证相关;

基于Cookie的身份验证令牌将无效,用户需要以再次登录。

因此,为了保持密钥的持久性,我们需要再设置一个应用程序池的高级设置;必须设置加载用户配置文件为True。因此,密钥将存储在操作系统的文件夹中。(%LOCALAPPDATA%/ASP.NET/DataProtection Keys)

我找到了解决方案。只需在var app = builder.Build();:之前添加这行代码

builder.Services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(Directory.GetCurrentDirectory())).SetDefaultKeyLifetime(TimeSpan.FromDays(30));