打开多个选项卡的自动注销

Posted

技术标签:

【中文标题】打开多个选项卡的自动注销【英文标题】:Auto-Logout with multiple tabs open 【发布时间】:2011-03-25 19:26:59 【问题描述】:

我们已经实现了一个类似于other SO post 中描述的系统。基本上,如果用户在 14 分钟内没有做任何事情,我们会提示他们将被注销。如果他们点击“让我登录”,我们会发出 ajax 请求以保持他们的会话处于活动状态,否则,他们会在一分钟后重定向到注销页面。

它运行良好,并且与 mint.com 和 bankofamerica.com 等网站使用的类似系统内联。唯一的问题是我们的应用程序的用户倾向于打开多个选项卡来来回引用不同的数据。所以问题是他们可能正在一个选项卡中积极工作,但随后另一个选项卡超时并将它们注销。这会导致用户意外的会话超时。顺便说一句,mint.com 也有同样的问题。

所以我想知道是否有人有任何想法来解决这个问题?

我有一个想法,每个请求都可以设置一个“上次活动时间”cookie。在自动注销时,服务器可以检查最后一次活动时间,如果它是相对较新的,请避免将它们注销。手动注销当然会忽略此 cookie,因此如果用户想要注销,他可以随时这样做。但是,我担心这可能会暴露某种我目前无法看到的安全风险。想法?

【问题讨论】:

我知道这是很久以前发布的,但是刚刚偶然发现并产生了想法:如果用户打开了多个实例,并且 14 分钟结束了,弹出窗口将在所有情况下显示。此时,您可以每 x 秒检查一次(在用户退出之前的一分钟内),如果他们已经点击了“让我保持登录”(也最好通过 ajax)。如果您只检查上次活动的时间,我看到的问题是,一旦那些弹出显示并且用户在一个选项卡中将其关闭,由于参考从另一个选项卡注销,他们仍然会在一分钟后退出。跨度> 只需再添加一个步骤,@Chris:在注销之前检查服务器是否已重新启动。如果没有,请注销。 【参考方案1】:

在显示弹出窗口之前,询问服务器用户在多长时间前完成了他的最后一个请求。

【讨论】:

我们目前不存储最后一次请求时间......不过,也许如果我们反转问题。如果我们为每个请求设置该 cookie,然后按照您的建议,在显示超时对话框之前检查它。这样,我们不会向服务器本身添加任何代码。有趣,您认为这可行且安全吗? 如果攻击者可以读取cookies,他已经可以访问身份验证cookie并且他在系统中。所以这个 cookie 不会降低安全性。

以上是关于打开多个选项卡的自动注销的主要内容,如果未能解决你的问题,请参考以下文章

自动检测浏览器选项卡中的注销?

phpmyadmin 自动注销时间

如何显示足够智能以处理多个打开的浏览器或选项卡的会话超时警告

在 Spring Security 中使用 CSRF 令牌获取 403

如何在浏览器多个选项卡中处理用户注销?

如果选项卡关闭,则自动注销[重复]