ASP.NET会话在生产时过期

时间:2018-01-30 20:04:35

标签: c# asp.net session

我在 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}}

然后当我看到它没有工作时,我添加了最后一个,但它仍然不能用于生产。

那我该怎么办?

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中的回收“时间间隔”。

参考文献: