Cookie.ExpireTimeSpan 被忽略并在 CookieAuthentication 中设置为 Session

Igo*_*yuk 4 c# asp.net-web-api cookie-authentication

我有一个问题,而试图设置过期我一个cookie的时候CookieAuthentication,似乎ExpireTimeSpan只是忽略,当我得到在浏览器cookie的它的到期时间设置为Session..

我正在使用带有 .NET Core 3.1 的 c# 8.0,这是我的ConfigureService代码:

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options => {
            options.Cookie.Name = "authToken";
            options.ExpireTimeSpan = TimeSpan.FromMinutes(120);
            options.Events = new CookieAuthenticationEvents()
            {
                OnRedirectToLogin = (context) =>
                {
                    context.HttpContext.Response.Redirect("https://example.com/test/expired.html");
                    return Task.CompletedTask;
                }
            };
        });
        services.AddControllers();
    }
Run Code Online (Sandbox Code Playgroud)

但这就是我得到它的方式

在此处输入图片说明

dro*_*der 5

options.ExpireTimeSpan = TimeSpan.FromMinutes(120); 指示身份验证票本身的有效时间。

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

这与 的值不同,该值指定浏览器将保留 cookie 的时间。

文档

您想使用Expiration属性上的Cookie属性来控制 cookie 的过期时间。

public void ConfigureServices(IServiceCollection services)
{

    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options => {
        options.Cookie.Name = "authToken";
        /// control cookie expiration
        options.Cookie.Expiration = TimeSpan.FromMinutes(120);
        options.ExpireTimeSpan = TimeSpan.FromMinutes(120);
        options.Events = new CookieAuthenticationEvents()
        {
            OnRedirectToLogin = (context) =>
            {
                context.HttpContext.Response.Redirect("https://example.com/test/expired.html");
                return Task.CompletedTask;
            }
        };
    });
    services.AddControllers();
}
Run Code Online (Sandbox Code Playgroud)

或者,您也可以设置MaxAge属性。

  • 在 .NET Core 3.1 中,“Cookie.Expiration”似乎已过时,当我尝试设置它时,我只是得到“OptionsValidationException:Cookie.Expiration 被忽略,请改用 ExpireTimeSpan”。 (5认同)