.Net 8.0 立即运行后显示“Cookie.Expiration isignored, use ExpireTimeSpan 相反”

问题描述 投票:0回答:1

我已将我的 mvc 应用程序从 .net core 2.2 转换为 .net 8.0,但是当它运行时,它没有显示登录页面,而是抛出如下错误,

Cookie.Expiration is ignored, use ExpireTimeSpan instead.

我正在使用 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();

请任何人帮忙解决这个问题,谢谢!

asp.net-mvc asp.net-core .net-6.0 .net-7.0 .net-8.0
1个回答
0
投票

根据错误信息,你会发现你应该使用

options.ExpireTimeSpan = TimeSpan.FromHours(24);
而不是
options.Cookie.Expiration = TimeSpan.FromHours(24);

这是新版本,它控制存储在 cookie 中的身份验证票证从创建之日起保持有效的时间。过期信息存储在受保护的 cookie 票证中。因此,即使在浏览器应该清除它之后将其传递到服务器,过期的 cookie 也会被忽略。

这与 Expires 的值是分开的,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.FromMinutes(120);
            options.Cookie.MaxAge = TimeSpan.FromHours(24);
        });
© www.soinside.com 2019 - 2024. All rights reserved.