我正在使用一个使用asp.net身份的asp.net mvc应用程序
在Startup.Auth.cs
文件中,我将ExpireTimeSpan
设置为20天,但是当我登录到我的应用时,我的应用会在20天内注销,我必须登录agian!
Startup.Auth.cs
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User>(
validateInterval: TimeSpan.FromMinutes(0),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
},
ExpireTimeSpan = TimeSpan.FromDays(20),
SlidingExpiration = true
});
并在Login
操作中
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
更新
当我登录时,生成.AspNet.ApplicationCookie
并且它的过期日期设置为“20”天后,当我第二天打开网站时,我注销但cookie已存在。
这个问题的原因是什么?
提前谢谢。
答案 0 :(得分:1)
以下是早于预期退出的几个原因:
在同一个域中拥有多个网络应用,并且所有网络应用都有the same cookie name
(Cookie名称冲突)。在这种情况下,应用A会覆盖应用B的cookie。
当validateInterval
设置为零/ TimeSpan.FromMinutes(0)
时,对UpdateSecurityStamp
的所有调用都会强制用户注销并立即重新登录,包括UserManager.CreateAsync
,{ {1}},UserManager.RemovePasswordAsync
,UserManager.UpdatePassword
,UserManager.RemoveLoginAsync
,UserManager.ChangePhoneNumberAsync/SetPhoneNumberAsync
,UserManager.SetTwoFactorEnabledAsync
。这意味着如果您更新用户的属性,则会调用UserManager.SetEmailAsync
。
UpdateSecurityStamp
,它也会覆盖.NET framework
。更改它会将所有已发布的cookie标记为无效。 Machine-Key是一组用于加密和解密cookie的密钥。如果您在负载均衡器后面运行,则需要确保Web场使用一致的machine-key
。machine-key
太多,它们会变大(大于~5K),而某些浏览器会拒绝它们。所以检查发布的cookie的大小。