我有一个半单页面应用程序(登录通过ajax调用在一个页面上进行后的所有服务器交互),它使用会话存储和OWIN cookie身份验证。会话和cookie过期都设置为15分钟,cookie配置为使用滑动过期。
在每次服务器交互时,客户端上的计时器将重置为15分钟。如果14分钟内未记录任何活动,则会显示一个模式,其中有一个滚动条,提醒用户该会话将很快超时。
我们遇到了一个问题,在某些情况下,我们的会话比OWIN cookie更长。
根据CookieAuthenticationOptions类:
SlidingExpiration设置为true,以指示中间件在处理请求时超过到期时间的一半时,重新发布具有新到期时间的新Cookie。
我们有这样的场景:用户在到期时间之前使用应用程序“,然后让应用程序闲置几分钟。当用户看到会话过期通知时,他们会尝试续订会话。但由于OWIN cookie从未续订,因此应用程序超时并将其重定向到登录页面(过早地根据过期通知所说的内容)。
这support article完全说明了我们的情况:
我们举一个例子:如果登录页面是在下午5:00 00:00:00访问的,那么如果超时属性为10且slideExpiration属性为,则它应在5:10 00:00:00 PM到期设为TRUE。现在,如果在下午5:05 00:00:00再次浏览任何网页,则cookie和票证超时时间将重置为下午5:15 00:00:00。
注意如果在过期时间的一半之前访问网页,则不会重置故障单过期时间。例如,如果在下午5:04 00:00:00再次访问任何网页,则不会重置cookie和票证超时期限。
以前有没有人碰到这个?我们如何避免它?调整OWIN超时只会延长问题。
我无法帮助认为这是OWIN框架中的一个可怕的设计缺陷,或者我们没有正确使用它。
感谢任何帮助。感谢。
答案 0 :(得分:2)
我们最终实现的解决方案是使用保持活动逻辑解决方案。我真的希望他们能够在传统意义上实现“滑动过期”,但现在必须这样做。
解决方案:
仅向服务器发送保持活动请求,直到一半之后 OWIN饼干生命过去了。发送保持活动状态时,将更新cookie,这将使会话和cookie超时保持同步。