.NET CORE会话滑动过期问题

时间:2019-07-01 09:27:54

标签: c# asp.net-core .net-core

我的问题是我无法为会话设置滑动到期配置。

在使用应用程序时,身份Cookie正在滑动并且没有过期,但是会话没有滑动,在IIS会话超时之后,该会话在更新自身,并且清除了我的会话数据。

这是我的启动代码:

    public void ConfigureServices(IServiceCollection services)
    {
        // some other configurations..

        services.ConfigureApplicationCookie(options =>
        {
            options.ExpireTimeSpan = TimeSpan.FromHours(6);
            options.LoginPath = "/Auth/Login";
            options.AccessDeniedPath = "/Dashboard";
            options.LogoutPath = "/Auth/Logout";
            options.SlidingExpiration = true;
            options.Cookie.IsEssential = true;
        });

        services.AddSession(options =>
        {
            options.IdleTimeout = TimeSpan.FromHours(6);
            options.Cookie.HttpOnly = true;
            options.Cookie.IsEssential = true;
        });

    }

如何为会话的cookie设置滑动到期属性?

1 个答案:

答案 0 :(得分:0)

您的问题有点含糊,但我认为您所说的“ IIS会话超时”实际上是应用程序池正在停止并重新启动。基于此,您可能会使用内存中会话存储,并且由于它是受进程限制的,因此当应用程序池运行时,您的会话将消失。

在后台,会话利用IDistributedCache进行存储。缺省的提供程序是DistributedMemoryCache。尽管有名称,但实际上并没有分发。它只是使用内存的IDistributedCache的实现,但是仍然遭受任何基于内存的缓存的所有问题。

总之,您需要一个持久的分布式缓存解决方案,例如SQL Server或Redis。参见:https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed?view=aspnetcore-2.2#establish-distributed-caching-services

设置好之后,会话也将保持持久状态,仅在实际需要时才超时。