正在同步OWIN Cookie过期(滑动)和会话超时



背景

我有一个半单页应用程序(登录后的所有服务器交互都通过ajax调用在一个页面上进行(,它同时使用会话存储和OWIN cookie身份验证。会话和cookie过期都设置为15分钟,并且cookie配置为使用滑动过期。

在每次服务器交互时,客户端上的计时器都会重置回15分钟。如果在14分钟内没有记录任何活动,则会显示一个模式,并带有一个自动收音器,提醒用户会话即将超时。

问题

我们遇到了一个问题,在某些情况下,我们的会话比OWIN cookie要长。

根据CookieAuthenticationOptions类:

SlidingExpiration设置为true,指示中间件在处理超过到期窗口一半的请求时重新发布具有新到期时间的新cookie。

我们有这样的场景,其中用户在";到期窗口过半",然后让应用程序闲置几分钟。当用户看到会话到期通知时,他们会尝试续订会话。但由于OWIN cookie从未更新,应用程序会超时并将其重定向到登录页面(根据过期通知的内容提前(。

这篇支持文章准确地说明了我们的情况:

让我们举一个例子:如果登录页面是在下午5:00 00:00:00访问的,那么如果timeout属性为10并且slidingExpiration属性设置为TRUE,它应该在下午5:10 00:00:00过期。现在,如果在下午5:05 00:00:00再次浏览任何网页,cookie和票证超时时间将重置为下午5:15 00:00:00。

注意:如果在超过一半的过期时间之前访问了网页,则不会重置票证过期时间。例如,如果在下午5:04 00:00:00再次访问任何网页,cookie和票证超时时间将不会重置

问题/评论

以前有人遇到过这种情况吗?我们如何避免它?调整OWIN超时只会延长问题。

我不禁认为,这要么是OWIN框架中一个可怕的设计缺陷,要么是我们没有正确使用它。

感谢您的帮助。谢谢

我们最终实现的解决方案是使用我们的保活逻辑进行变通。我真的希望他们能在更传统的意义上实施"滑动到期",但现在必须这样做。

解决方案:

仅向服务器发送保持活动请求,直到OWIN饼干的寿命过去了。当发送保持活动时,cookie将被续订,这将使会话和cookie超时保持同步。

最新更新