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)
但这就是我得到它的方式
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
属性。