无论我尝试了什么,我似乎都无法将两次登录之间所需的时间增加不超过20到30分钟。即使用户一直处于活动状态,这也是如此-因此,这不仅仅是“空闲”时间,而是两次登录之间的最大时间。 20分钟后,用户将被重定向到登录页面以再次登录。
奇怪的是,当我将CookieOptions.ExpireTimeSpan减小到10秒左右时,它会按预期在10秒后重定向。我还测试了SlidingExpiration,它也可以工作-使用较低的ExpireTimeSpan,大于20/30分钟的任何内容似乎都不起作用。
我认为这可能与主机服务器的应用程序池设置有关。也许20分钟后应用程序池消失,导致登录无效,但是即使我直接从Visual Studio运行应用程序,也会发生这种情况。
老实说,我没有主意,如果这是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();
}
我的配置:
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);
}
}
}
真的很感谢任何提示!谢谢!