【问题标题】:Checking session expiration in the browser在浏览器中检查会话过期
【发布时间】:2014-10-17 11:16:54
【问题描述】:

我正在开发一个必须使用会话超时的应用。

问题是用户经常错过会话超时并丢失数据。我已经在 javascript 中实现了一个小型会话保持器,如果浏览器中有一些活动,它将每分钟更新一次会话,但是用户仍然以某种方式丢失数据(假设他们正在填写一半的表格,离开他们的机器和会话过期后返回并提交表单。)

我想找到一些方法来警告他们他们的会话已过期。问题是我不知道该怎么做。我无法在 javascript 中检查 session cookie 的过期时间,因为它是一个 HttpOnly cookie,如果我执行某种 AJAX 请求来检查 session 的状态,它会自动为 session 设置一个新的过期时间。

谁能找到绕过这些障碍的方法?

【问题讨论】:

  • 每次设置或刷新会话时,添加一个 setTimeout 会在 1 分钟内提醒用户,像这样setTimeout(function() { alert("Your session is expired.");}, 6000);
  • 如果他们提交了一个表单,而您的服务器端逻辑决定他们的会话已过期 - 那么为什么不简单地将他们提交的数据放入一个新会话中,并将他们重定向到登录表单?在他们再次成功登录后,您从会话中获取该数据,并对其进行处理……

标签: javascript ruby-on-rails session cookies


【解决方案1】:

这不是关于检查会话超时的直接答案...但是当我担心用户在表单中丢失工作时,我发现 garlic.js 可以提供帮助。基本上,它是一个 JS 库,负责将表单数据保存在用户浏览器的本地存储中,直到提交表单。这样,在浏览器关闭或会话过期的情况下,数据不会丢失。所以这对于数据丢失部分来说可能是一个很好的备份解决方案。

更新

为了避免在会话超时后提交表单,我通常会设置一个 javascript 计时器,该计时器将在典型会话超时长度后几秒钟自动将用户重定向到会话过期页面(使用简单的再次登录按钮)。 (当页面内有活动时,您可以使用 AJAX 轮询重置此计时器。)这结合了garlic.js,结合了“深度潜水”功能(通过这种方式,您可以在访问时将经过身份验证的 URL 存储在会话中,以便之后超时并重新登录您将用户返回到他们所在的最后一页)创建一个非常无缝的超时,登录,从您离开的地方继续。

【讨论】:

  • 酷!我没有听说过大蒜,唯一的问题是当你提交表单时它会清除 localStorage,而我遇到的问题是用户在会话过期后提交表单时。这确实激发了我编写一些代码来玩弄 localStorage 来解决问题。谢谢!
  • 更新了我的答案,包括更多关于如何处理“会话过期后提交表单”的事情。出于某种原因,我第一次没有明白这是问题所在,抱歉!
猜你喜欢
  • 2018-04-27
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2011-04-21
  • 2015-08-12
相关资源
最近更新 更多