Я преобразовал свое приложение mvc из .net core 2.2 в .net 8.0, но когда оно работает, оно не отображает страницу входа вместо того, чтобы выдавать ошибку, как показано ниже:
Я использую сеанс Redis. Я установил конфигурацию, как показано ниже,
services.AddStackExchangeRedisCache(option =>
{
option.Configuration = Configuration.GetConnectionString("AzureRedisConnection");
option.InstanceName = !string.IsNullOrEmpty(Configuration.GetSection("SessionSettings")["RedisInstancePrefix"]) ? Configuration.GetSection("SessionSettings")["RedisInstancePrefix"] : "CrmStep_";
});
services.AddSession(options =>
{
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
options.Cookie.MaxAge = TimeSpan.FromHours(24);
options.IOTimeout = TimeSpan.FromMinutes(!string.IsNullOrEmpty(Configuration.GetSection("SessionSettings")["IOTimeOut"]) ? Convert.ToDouble(Configuration.GetSection("SessionSettings")["IOTimeOut"]) : 1440);
options.IdleTimeout = TimeSpan.FromMinutes(!string.IsNullOrEmpty(Configuration.GetSection("SessionSettings")["IdleTimeOut"]) ? Convert.ToDouble(Configuration.GetSection("SessionSettings")["IdleTimeOut"]) : 1440);
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Login";
options.Cookie.HttpOnly = true;
options.SlidingExpiration = true;
options.Cookie.Expiration = TimeSpan.FromHours(24);
options.ExpireTimeSpan = TimeSpan.FromHours(24);
options.Cookie.MaxAge = TimeSpan.FromHours(24);
});
app.UseHttpsRedirection();
app.UseCookiePolicy();
app.UseStaticFiles();
app.UseForwardedHeaders();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
Пожалуйста, помогите кто-нибудь это исправить, спасибо!
Судя по сообщению об ошибке, вы можете обнаружить, что вам следует использовать options.ExpireTimeSpan = TimeSpan.FromHours(24);
вместо options.Cookie.Expiration = TimeSpan.FromHours(24);
, поскольку ExpireTimeSpan будет игнорировать срок действия.
Этот параметр options.ExpireTimeSpan определяет, в течение какого времени билет аутентификации, хранящийся в файле cookie, будет оставаться действительным с момента его создания. Информация об истечении срока действия хранится в защищенном билете cookie. По этой причине файл cookie с истекшим сроком действия будет игнорироваться, даже если он будет передан на сервер после того, как браузер должен был его очистить.
Это значение отличается от значения Expires, которое определяет, как долго браузер будет хранить файл cookie.
Используйте приведенные ниже коды, и все будет работать хорошо.
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Login";
options.Cookie.HttpOnly = true;
options.SlidingExpiration = true;
//options.Cookie.Expiration = TimeSpan.FromHours(24);
options.ExpireTimeSpan = TimeSpan.FromHours(24);
options.Cookie.MaxAge = TimeSpan.FromHours(24);
});
Большое спасибо! Но я уже завершил это вчера, как вы и предложили.