背景
我有一个半单页应用程序(登录后所有服务器交互都通过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过期。 现在,如果再次浏览任何网页,则cookie和票证的超时时间将重置为下午5:15 00:00:00。
注意:如果在过期时间的一半之前访问Web页面,则不会重置票证的过期时间。例如,如果在下午5:04 00:00:00再次访问任何Web页面,则cookie和票证的超时时间将不会被重置。
问题/评论
有人曾经遇到过这种情况吗?我们该如何避免它?调整OWIN超时只会延长该问题。
我不禁想到,这要么是OWIN框架中的一个糟糕的设计缺陷,要么就是我们没有正确使用它。
感谢您的任何帮助。谢谢。