我在 app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromDays(3650),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
},
ExpireTimeSpan = TimeSpan.FromDays(3650),
});
中将会话超时设置为3650天。在我的计算机上它工作正常,会话永不过期但在生产中它会在30分钟后到期。
validateInterval: TimeSpan.FromDays(3650),
顺便说一下,我知道有两行代码来处理会话时间。起初,我只是使用
{{1}}
然后当我看到它没有工作时,我添加了最后一个,但它仍然不能用于生产。
那我该怎么办?
答案 0 :(得分:1)
即使cookie在到期前可以保留数天,cookie也会包含一个映射到服务器对象的会话ID。
默认行为是将会话变量存储在内存空间中 ASP.NET工作进程。
Asp.Net应用程序在IIS上运行,它执行应用程序回收,杀死线程并定期重新启动应用程序以避免内存泄漏等问题。这也会让你失去会话。
会话启动,因为请求不包含会话cookie 或其确实包含的会话Cookie不再映射到会话。 A. 会话结束于a)它已经闲置,没有进一步的请求 在超时期间引用它。 b)故意中止 码。 c)进程内进程会在进程执行时死亡,例如当。。。的时候 应用已被回收。
换句话说,默认情况下,您不能指望Session对象活3650天(10年)unless you change IIS configuration and disable recycling and idling,这很危险。
但是,您也可以指定会话状态应存储在a中 单独的进程,SQL Server数据库中的或自定义数据 来源
考虑增加IIS中的回收“时间间隔”。
参考文献: