解决Web应用程序中会话超时的最佳方法?

时间:2020-03-06 14:32:08  来源:igfitidea点击:

我目前正在构建用于工厂/仓库类型位置的内部Web应用程序。用户将在几个人之间共享一台PC,因此我们需要有一个相当短的会话超时时间,以阻止人们徘徊并离开应用程序登录状态,以便其他人可以进入PC并在先前用户的用户名下执行某项操作。

这样的问题是,当用户当前将信息输入到表单中时,会话可能会超时,特别是如果他们花费很长时间的话。

我们将如何以用户友好的方式处理此问题?

解决方案

最好的建议可能是要求用户在完成后关闭浏览器窗口。通过使用会话cookie,当关闭浏览器或者以30分钟超时(可以更改为afaik)时,会话将自动结束。

由于默认情况下,一旦加载页面,浏览器和服务器之间就不会进行任何交互,因此我们必须让javascript在窗体页面的后台与服务器联系以刷新会话,但是这样做似乎有点麻烦这样的小问题。

使用AJAX定期存储部分填写的表单的内容,这样,如果它们被系统引导,它们就不会丢失工作。哎呀,一旦这样做,就可以使用AJAX避免他们的会话在花时间输入时超时。

在这种情况下,保持活动的javascript进程可能会有所帮助。如果脚本捕获了一些关键触发器,它将向服务器发送"我仍在键入"消息,以使会话保持活动状态。

使服务器了解用户正在积极输入信息的事实。
例如,如果用户按下TAB键或者在字段上单击鼠标,则将消息发送到服务器。
最终的解决方案取决于我们。

如果会话超时太短,以至于用户没有时间填写表单,我会每隔几分钟放置一个AJAX脚本,该脚本每隔几分钟向服务器发出一个HTTP请求,以使会话保持活动状态。我只会在用户必须填写内容或者已经开始填写内容的页面上这样做。

另一种解决方案是使用会话超时提醒脚本,该脚本会弹出一个对话框来提醒用户会话即将超时。弹出窗口应显示一个"注销"和一个"继续使用应用程序",该请求发出ajax请求以更新会话超时。

我们是否考虑过将表格分成较小的块?

作为技术解决方案的替代方法,我们可以按每次完成特定工作(例如填写表格)的方式来制作应用程序,我们询问用户是否要继续执行另一项工作或者已完成。 Yould可能具有一个带有菜单选项的开始屏幕,如果用户选择一个选项,则他首先必须输入其凭据。

或者在表单上输入密码字段。取决于他们必须填写几个表格的会话。

当用户发布表单并且他们的会话超时时,我们应该确保将表单值保存在某个地方,然后要求用户再次登录。他们重新验证了身份之后,就可以重新提交表单(因为他们的所有数据都不会丢失)。

监视超时并发布一个弹出窗口,以通知用户其当前会话将过期,并显示"确定"或者"取消"按钮。单击确定以使会话继续进行(即,根据需要将计数器重置为另外5分钟或者10分钟)-或者取消以允许会话继续倒数至零并因此结束。
那是处理它的许多方法之一。

我开发了一些需要很长时间的课程。用户坐在机器上时登录页面,完成工作后退出。现在他可能会使用系统几分钟或者几个小时。为了使会话保持活动状态,直到他注销为止,我使用带有javascript的计时器,将其转到服务器并使用服务器上的当前时间更新了国歌标签。

对我来说,使用JavaScript"线程"保持会话打开是一个坏主意。

这与会话超时的想法背道而驰,会话超时的存在是为了在应用程序前面没有用户的情况下释放一些资源。

我认为我们应该使用更准确的时间来调整会话超时,以便将表格填写为"典型的正常使用情况"。

我们也可以通过以下方式积极主动:

  • 让JavaScript警报在超时到期之前向用户显示非侵入性警告(而不是弹出窗口),表示会话即将过期(并提供链接以发送ajax请求以重置超时并删除该警告-这样可以避免用户丢失他当前正在输入的表格),
  • 并且还有另一个JavaScript"线程",如果会话已过期,则将其重定向到登录页面,并显示一条消息,表明会话现在已过期。

它认为这是最好的,因为它可以避免用户一无所获地填写复杂的表格,并在用户离开后处理情况。