在我的启动课程中,我使用以下代码启用会话存储:
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分钟后,其中的用户数据。
答案 0 :(得分:2)
会话没有像cookie那样的“过期”,但是默认的空闲超时为20分钟,可以使用IdleTimeout选项进行调整。
会话仅在空闲超时时间过去之后过期。此外,空闲超时将在收到最后一个请求后开始。
对于您的情况,会话将不会过期,因为您每5到10秒轮询一次(检查会话数据)。该轮询被视为对.net核心的“请求”,并重置超时。
您可以通过禁用轮询并使用检查会话数据的按钮创建页面来验证这一点。等待一段时间(例如20秒),然后单击按钮。
确保将“空闲超时”设置为较低的值:
options.IdleTimeout = TimeSpan.FromSeconds(10);
这里是指向Documentation on Session的链接。