Независимо от того, что я пробовал, я не могу увеличить время, необходимое для входа в систему, более чем на 20-30 минут. Это даже в том случае, если пользователь постоянно активен - так что это не просто время простоя, это максимальное время между входами в систему. Через 20 минут пользователь перенаправляется на страницу входа для повторного входа.
Странно то, что когда я уменьшаю CookieOptions.ExpireTimeSpan примерно до 10 секунд, он перенаправляется через 10 секунд, как и ожидалось. Я также протестировал SlidingExpiration, и он тоже работает - при использовании более низкого ExpireTimeSpan все, что больше 20/30 минут, похоже, не работает.
Я подумал, что это может иметь какое-то отношение к настройкам пула приложений моего хост-сервера. Возможно, пул приложений умирает через 20 минут, что приводит к недействительности входа в систему, но это происходит даже тогда, когда я запускаю приложение прямо из Visual Studio.
Честно говоря, у меня нет идей, и я даже не знаю, как отладить это, если это проблема с файлами cookie. Я был бы очень признателен за любую помощь, даже если есть способ прочитать значение ExpireTimeSpan в файле cookie после входа в систему.
Это мой код в настоящее время при запуске:
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 app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
1);
services.AddHttpContextAccessor();
}
Моя конфигурация:
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Я вхожу в систему, используя это:
[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);
}
}
}
Буду очень признателен за любые подсказки! Спасибо!
ConfigureApplicationCookie
не будет работать, он по умолчанию выдаст файл cookie сеанса. - person Nan Yu   schedule 15.07.2019