首页 > 解决方案 > .NET Core 2.x 中的默认会话到期时间是多少?

问题描述

在我的启动课程中,我使用以下行启用会话存储:

        services.AddDistributedMemoryCache()
        .AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromMinutes(20);
                options.Cookie.HttpOnly = true;
            })

但是,如果我理解正确,设置IdleTimeout属性只是说明如果用户超过 20 分钟未完成任何操作,会话将重新开始。我的应用程序有轮询,它每 5-10 秒使用一次会话存储中的用户信息,所以我认为这在这里永远不会有用。用户权限和角色可以从当前用户浏览器之外的操作更改,因此我想将会话存储限制为 1 分钟。我似乎找不到任何关于默认到期时间或如何正确设置的确切措辞。

CookieBuilder 类有 Expiration 和 MaxAge 选项,但我不知道哪个是必要的。我还读过Expiration is ignored,这让我在这个主题上更加困惑。

更新:当我尝试设置过期时收到此消息:“无法为 SessionOption 定义的 cookie 设置过期”,因此我将 MaxAge 设置为 1 分钟,但我可以看到会话中仍有旧用户数据超过 1 分钟后。

标签: c#sessionasp.net-core-2.0session-cookies

解决方案


会话没有像 cookie 那样的“过期”,但默认的空闲超时是 20 分钟,并且可以使用 IdleTimeout 选项进行调整。

会话仅在空闲超时期限过后才过期。此外,空闲超时在收到最后一个请求后开始。

对于您的情况,会话不会过期,因为您每 5 到 10 秒轮询一次(检查会话数据)。此轮询被视为对 .net 核心的“请求”,并重置超时。

您可以通过禁用轮询并创建一个带有检查会话数据的按钮的页面来验证这一点。等待一段时间(例如:20 秒),然后单击按钮。

确保将 Idle Timeout 设置为较低的值:

options.IdleTimeout = TimeSpan.FromSeconds(10);

这是Session 文档的链接。


推荐阅读