ASP.NET 身份、"Remember Me" 和 cookie 超时
ASP.NET Identity, "Remember Me" and cookie timeout
在我的 MVC Startup.Auth.cs 文件中,有这段代码:
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentityCallback: (manager, user) =>
user.GenerateUserIdentityAsync(manager),
getUserIdCallback: (id) => (id.GetUserId<int>()))
}
如果我理解正确的话,登录 cookie 将在 30 分钟后过期。这意味着用户将在 30 分钟内被迫重新登录。如果这是正确的,那么如果登录 cookie 在 30 分钟后过期,那么让用户 select "Remember Me" 出现在登录页面上的价值是多少?
您显示的代码片段与 "Remember Me" 没有太大关系。 SecurityStampValidator
实际上是在检查创建的 cookie 是否仍然对数据库中的用户记录有效。并且 validateInterval: TimeSpan.FromMinutes(30)
定义了根据数据库检查 cookie 的频率间隔。
身份框架创建的 Cookie 包含通常足以使用的数据,而无需在每次 HTTP 请求时返回数据库,因此为了提高性能,不会在每次请求时与数据库检查 cookie。但是您可以通过更改数据库中的 SecurityStamp
来使所有用户 cookie 无效。 SecurityStampValidator
对此进行检查。但如果用户登录后 30 分钟内没有任何变化,他们将不会被注销。只会更新cookie的值,但用户仍会登录。
我希望现在更清楚了。
在我的 MVC Startup.Auth.cs 文件中,有这段代码:
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentityCallback: (manager, user) =>
user.GenerateUserIdentityAsync(manager),
getUserIdCallback: (id) => (id.GetUserId<int>()))
}
如果我理解正确的话,登录 cookie 将在 30 分钟后过期。这意味着用户将在 30 分钟内被迫重新登录。如果这是正确的,那么如果登录 cookie 在 30 分钟后过期,那么让用户 select "Remember Me" 出现在登录页面上的价值是多少?
您显示的代码片段与 "Remember Me" 没有太大关系。 SecurityStampValidator
实际上是在检查创建的 cookie 是否仍然对数据库中的用户记录有效。并且 validateInterval: TimeSpan.FromMinutes(30)
定义了根据数据库检查 cookie 的频率间隔。
身份框架创建的 Cookie 包含通常足以使用的数据,而无需在每次 HTTP 请求时返回数据库,因此为了提高性能,不会在每次请求时与数据库检查 cookie。但是您可以通过更改数据库中的 SecurityStamp
来使所有用户 cookie 无效。 SecurityStampValidator
对此进行检查。但如果用户登录后 30 分钟内没有任何变化,他们将不会被注销。只会更新cookie的值,但用户仍会登录。
我希望现在更清楚了。