Din*_*rdo 6 c# session session-cookies asp.net-core-2.0
在启动类中,我使用以下代码启用会话存储:
services.AddDistributedMemoryCache()
.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.HttpOnly = true;
})
Run Code Online (Sandbox Code Playgroud)
但是,如果我正确理解这一点,则设置该IdleTimeout属性仅表示如果用户在20分钟内未完成任何操作,会话将重新开始。我的应用程序具有轮询功能,它每5-10秒使用一次会话存储中的用户信息,因此我认为这在这里永远不会有用。用户权限和角色可以从当前用户浏览器之外执行的操作中更改,因此我想将会话存储限制为1分钟。我似乎找不到关于默认到期时间或如何正确设置的确切说法。
CookieBuilder类具有Expiration和MaxAge选项,但我不知道哪个是必需的。我还阅读了Expiration被忽略的信息,这使我对该主题的困惑更加严重。
更新:当我尝试设置过期时间时,我收到此消息:“无法为SessionOption定义的cookie设置过期时间”,因此我将MaxAge设置为1分钟,但是我可以看到该会话中仍然有旧的用户数据超过1分钟后。
会话不像 cookies 那样有“过期时间”,但默认的空闲超时为 20 分钟,并且可以使用 IdleTimeout 选项进行调整。
会话仅在空闲超时期限过后过期。此外,空闲超时在收到最后一个请求后开始。
对于您的情况,会话不会过期,因为您每 5 - 10 秒轮询一次(检查会话数据)。此轮询被视为对 .net core 的“请求”,并重置超时。
您可以通过禁用轮询并创建一个带有检查会话数据的按钮的页面来验证这一点。等待一段时间(例如:20 秒),然后单击按钮。
确保将空闲超时设置为较低的值:
options.IdleTimeout = TimeSpan.FromSeconds(10);
Run Code Online (Sandbox Code Playgroud)
这是有关 Session 的文档的链接。
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |