这可能是由于Cookie的过期时间不一致导致的。在Startup.cs文件中,可以使用以下代码捕获Logout事件并设置Cookie超时时间:
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.StatusCode = 401;
return Task.FromResult(0);
};
options.ExpireTimeSpan = TimeSpan.FromMinutes(30); // 设置Cookie超时时间
});
此代码将设置Cookie的过期时间为30分钟。您可以根据需要更改此值。如果没有在Cookie中设置超时时间,Cookie将在关闭浏览器时过期。
另一个可能的解决方法是在应用程序中使用Redis存储。在redis中保存用户状态,而应用程序服务器不必存储关于哪些用户是签入的一切信息。在用户通过身份验证后,将生成一个identity token令牌,并将其移动到redis服务器,这将建立一个信任关系。与此同时,令牌将被存储在用户的cookie中,并使用受密码学保护的reference ID进行引用。这种方法也可以让用户在应用程序中跨设备登录。
services.AddDistributedRedisCache(options =>
{
options.Configuration = Configuration.GetValue("Redis:ConnectionString");
options.InstanceName = "Session_";
});
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.StatusCode = 401;
return Task.FromResult(0);
};
options.ExpireTimeSpan = TimeSpan.FromMinutes(30); // 设置Cookie超时时间
options.SessionStore = new RedisCacheSessionStore(
provider.GetRequiredService(),
options.Cookie.Name,
options.Cookie.SecurePolicy,
new System.TimeSpan(0,30,0)
);
});