c# - .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 分钟后。
解决方案
会话没有像 cookie 那样的“过期”,但默认的空闲超时是 20 分钟,并且可以使用 IdleTimeout 选项进行调整。
会话仅在空闲超时期限过后才过期。此外,空闲超时在收到最后一个请求后开始。
对于您的情况,会话不会过期,因为您每 5 到 10 秒轮询一次(检查会话数据)。此轮询被视为对 .net 核心的“请求”,并重置超时。
您可以通过禁用轮询并创建一个带有检查会话数据的按钮的页面来验证这一点。等待一段时间(例如:20 秒),然后单击按钮。
确保将 Idle Timeout 设置为较低的值:
options.IdleTimeout = TimeSpan.FromSeconds(10);
这是Session 文档的链接。
推荐阅读
- docker - 与虚拟机相比,容器化是否总能节省 CPU、内存和存储成本?
- javascript - 如何根据 if-else 给两个不同的 herf 到脚踝标签
- wagtail - ImageChooserPanel 错误地显示为 Select 小部件
- php - 如何将 html 表单值传递给 2 个不同的 PHP 函数
- javascript - 选中复选框时显示多个项目
- networking - 定位服务器 IP 地址
- javascript - 如何检查浏览器是否缓存了 JS 库?
- java - TextInputLayout setError() 没有出现在片段内
- c# - .NET Core 中的多个 MemoryCache 实例
- c - C 错误:无法获取“结构像素”类型的右值的地址