【问题标题】:ASP.NET session expires too fast on productionASP.NET 会话在生产中过期太快
【发布时间】:2018-01-31 06:19:33
【问题描述】:

我在Startup.Auth.cs 中将会话超时设置为 3650 天。在我的电脑上它工作正常,会话永不过期,但在生产中它会在 30 分钟内过期。

    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),


    });

顺便说一句,我知道有两行代码来处理会话时间。起初,我只是使用

validateInterval: TimeSpan.FromDays(3650),

然后当我看到它不起作用时,我添加了最后一个,但它仍然无法用于生产。

那我还应该怎么做?

【问题讨论】:

    标签: c# asp.net session


    【解决方案1】:

    即使 cookie 可以在过期前保留几天,cookie 也会包含一个映射到服务器上的对象的会话 id。

    默认行为是将会话变量存储在内存空间中 ASP.NET 工作进程。

    Asp.Net 应用程序在 IIS 上运行,IIS 执行应用程序回收、终止线程并定期重新启动应用程序以避免内存泄漏等问题。这也会让你失去会话。

    会话开始,因为请求不包含会话 cookie 或其中包含的会话 cookie 不再映射到会话。 A 会话以 a) 结束,它处于空闲状态,没有进一步的请求 在超时期间引用它。 b) 它被故意中止 代码。 c) 进程执行时进程内会话终止,例如当。。。的时候 应用被回收

    换句话说,默认情况下,您不能期望 Session 对象能够存活 3650 天(10 年)unless you change IIS configuration and disable recycling and idling,这很危险。

    但是,您也可以指定会话状态应存储在 单独的进程,在 SQL Server 数据库中,或在自定义数据中 来源

    考虑增加 IIS 中回收的“时间间隔”。

    参考资料:

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 2014-02-20
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 2012-02-05
      • 1970-01-01
      • 2016-10-03
      相关资源
      最近更新 更多