【发布时间】:2017-03-17 00:08:01
【问题描述】:
背景
我有一个使用会话存储和 OWIN cookie 身份验证的半单页应用程序(登录后的所有服务器交互都通过 ajax 调用在一个页面上进行)。会话和 cookie 过期都设置为 15 分钟,并且 cookie 配置为使用滑动过期。
在每次服务器交互时,客户端上的计时器都会重置为 15 分钟。如果 14 分钟内没有记录任何活动,则会显示一个模式,并带有一个提示器,提醒用户会话即将超时。
问题
我们遇到了一个问题,在某些情况下,我们的会话超过了 OWIN cookie。
根据CookieAuthenticationOptions 类:
SlidingExpiration 设置为 true 以指示中间件在处理超过过期窗口一半的请求时重新发出具有新过期时间的新 cookie。。 p>
我们有这样的场景,用户在“过期窗口中途”之前使用应用程序,然后让应用程序闲置几分钟。当用户看到会话过期通知时,他们会尝试更新会话。但由于 OWIN cookie 从未更新过,因此应用程序超时并将它们重定向到登录页面(过早地基于过期通知所说的内容)。
这个support article正好说明了我们的情况:
举个例子:如果登录页面是在下午 5:00 00:00:00 访问的,如果 timeout 属性为 10 并且slidingExpiration 属性为设置为真。现在,如果在下午 5:05 00:00:00 再次浏览任何网页,cookie 和票证超时期限将重置为下午 5:15 00:00:00。
注意如果在过期时间过半之前访问网页,票证过期时间不会被重置。例如,如果在下午 5:04 00:00:00 再次访问任何网页,则不会重置 cookie 和票证超时期限。
问题/意见
以前有人遇到过这种情况吗?我们如何避免它?调整 OWIN 超时只会延长问题。
我不禁认为这要么是 OWIN 框架中的一个可怕的设计缺陷,要么我们没有正确使用它。
感谢任何帮助。谢谢。
【问题讨论】:
-
您是否偶然使用了身份验证提供程序?
-
是的,Microsoft.Owin.Security.Cookies.CookieAuthenticationProvider 用一些简单的逻辑在“OnValidateIdentity”方法中注入一些声明。
-
你能用你的 cookie 授权码编辑你的帖子吗?
标签: c# asp.net-mvc authentication cookies owin