Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 用户总是需要在20-30分钟后登录_Asp.net Core_Asp.net Identity_Asp.net Authentication - Fatal编程技术网

Asp.net core 用户总是需要在20-30分钟后登录

Asp.net core 用户总是需要在20-30分钟后登录,asp.net-core,asp.net-identity,asp.net-authentication,Asp.net Core,Asp.net Identity,Asp.net Authentication,无论我做了什么尝试,我似乎都无法将两次登录之间所需的时间增加超过20~30分钟。即使用户持续处于活动状态,也会出现这种情况,因此这不仅仅是“空闲”时间,而是两次登录之间的最长时间。 20分钟后,用户被重定向到登录页面再次登录 奇怪的是,当我将CookieOptions.ExpireTimeSpan减少到大约10秒时,它会在10秒后按预期重定向。我还测试了SlidingExpiration,这也很有效——使用较低的ExpiriteTimeSpan,任何大于20/30分钟的东西似乎都不起作用 我认为

无论我做了什么尝试,我似乎都无法将两次登录之间所需的时间增加超过20~30分钟。即使用户持续处于活动状态,也会出现这种情况,因此这不仅仅是“空闲”时间,而是两次登录之间的最长时间。 20分钟后,用户被重定向到登录页面再次登录

奇怪的是,当我将CookieOptions.ExpireTimeSpan减少到大约10秒时,它会在10秒后按预期重定向。我还测试了SlidingExpiration,这也很有效——使用较低的ExpiriteTimeSpan,任何大于20/30分钟的东西似乎都不起作用

我认为这可能与主机服务器的应用程序池设置有关。可能应用程序池在20分钟后死亡,导致登录无效,但即使我直接从VisualStudio运行应用程序,也会发生这种情况

老实说,我已经没有想法了,如果这是一个cookie问题,我甚至不知道如何调试它。即使有办法在登录后读取cookie上的ExpireTimeSpan值,我也非常感谢您的帮助

这是我当前启动时的代码:

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => false;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        //services.AddSingletons, Transients etc..
        services.AddIdentity<IdentityUser, IdentityRole>()
              .AddDefaultTokenProviders();

        services.Configure<IdentityOptions>(options =>
        {
            // Password settings.
            // Lockout settings.
            // User settings.
        });

        services.ConfigureApplicationCookie(options =>
        {
            options.LoginPath = "/Login";
            //sliding expiration doesn't seem to work, nor does expiretimespan
            options.SlidingExpiration = true;
            options.ExpireTimeSpan = TimeSpan.FromHours(1);
        });

        services.AddMvc(config =>
        {
            var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
            config.Filters.Add(new AuthorizeFilter(policy));
        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.AddHttpContextAccessor();
    }
我使用以下方式登录:

    [HttpPost]
    [Route("/Login")]
    [AllowAnonymous]
    public async Task<ActionResult> Login(string returnUrl, LoginFormModel loginFormModel)
    {
        returnUrl = returnUrl ?? Url.Content("~/");

        if (ModelState.IsValid) {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(loginFormModel.Username, loginFormModel.Password, loginFormModel.RememberMe, lockoutOnFailure: true);
            if (result.Succeeded) {
                _logger.LogInformation("User logged in.");
                return LocalRedirect(returnUrl);
            }
       }
   }
[HttpPost]
[路由(“/Login”)]
[异名]
公共异步任务登录(字符串returnUrl,LoginFormModel LoginFormModel)
{
returnUrl=returnUrl??Url.Content(“~/”);
if(ModelState.IsValid){
//这不会将登录失败计入帐户锁定
//要启用密码故障触发帐户锁定,请设置lockoutOnFailure:true
var result=wait _signInManager.PasswordSignInAsync(loginFormModel.Username,loginFormModel.Password,loginFormModel.RememberMe,lockoutOnFailure:true);
if(result.successed){
_logger.LogInformation(“用户登录”);
返回LocalRedirect(returnUrl);
}
}
}
如果有任何提示,我将不胜感激!谢谢

查看类似问题和错误报告

简言之,ASP.NET Core 2.1中存在漏洞。如果您正在实现自己的IUserStore,但未实现IUserSecurityStampStore,则即使cookie未过期,用户也会在30分钟后注销

快速修复方法是将安全戳验证增加到足够安全的值,如下所示:

services.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromHours(10));
services.Configure(o=>o.ValidationInterval=TimeSpan.FromHours(10));
查看类似问题和错误报告

简言之,ASP.NET Core 2.1中存在漏洞。如果您正在实现自己的IUserStore,但未实现IUserSecurityStampStore,则即使cookie未过期,用户也会在30分钟后注销

快速修复方法是将安全戳验证增加到足够安全的值,如下所示:

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

代码没有明显的问题,如果loginFormModel.Mememberme(isPersistent)为false,则
ConfigureApplicationCookie
将不起作用,默认情况下它将发出会话cookie。@您认为会话cookie仍应持续浏览器会话的生命周期否?因此,如果ExpireTimeSpan设置为这样,它应该仍然停留一个小时。代码没有明显问题,如果loginFormModel.Memberme(isPersistent)为false,则配置应用程序OK将无法工作,默认情况下,它将发出会话cookie。@会话cookie应持续浏览器会话的生命周期。否?因此,如果ExpireTimeSpan设置为1小时,它仍应保持1小时。