2008-09-22 141 views
11

我目前正在建立一个用于工厂/仓库类型位置的内部Web应用程序。用户将在几个人之间共享一台PC,因此我们需要一个相当短的会话超时时间来阻止人们离开,并将应用程序登录到其他人可以访问PC并根据以前用户的用户名执行操作。处理Web应用中会话超时的最佳方法?

问题在于,当用户正在向表单输入信息时,会话可能会超时,尤其是如果他们需要很长时间。

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

回答

3

让服务器了解用户正在主动输入信息的事实。 例如,如果用户按下TAB键或用鼠标点击字段,则向服务器发送消息。 最终的解决方案取决于你。

+0

我认为这对我的情况最好。与弹出对话框并显示用户可能不会理解的消息相比,它的侵扰性更小。它不会通过不断地轮询服务器而无限期地保持会话活动。 – anon 2008-09-22 13:43:33

2

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

由于缺省情况下浏览器和服务器之间没有交互,所以一旦页面加载完毕,您必须有一个javascript联系服务器在窗体页面的后台来刷新会话,但似乎有点这么小的问题太麻烦了。

3

使用Ajax定期藏匿部分填好的表格的内容,因此,如果他们得到由系统引导他们并没有失去他们的工作。哎呀,一旦你这样做了,如果他们花时间打字,使用AJAX保持会话不会超时。

1

也许在这种情况下保持活着的JavaScript过程可能会有帮助。如果脚本捕获了一些关键触发器,它会向服务器发送“我还在打字”消息以保持会话存活。

2

如果会话超时太短以至于用户没有时间填写表单,我会放一个AJAX脚本,每隔几分钟向服务器发出一个http请求,以保持会话活动。我只会在用户必须填写某些内容或已经开始填充内容的页面上执行此操作。

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

1

你有没有考虑过把表格分成小块?

+0

这可能会对用户有点恼人,但是当用户搞砸了某些事情时,拆分服务器端验证对用户来说可能不那么烦人。 – CrashCodes 2008-10-01 19:12:31

0

至于技术方案的选择,你可以让你的应用程序在每次一个特定的工作是做这样的方式,例如在填写表格,你问用户,如果他想继续做另外的工作或如果他完成了。 Yould可以有菜单选项的初始屏幕,并且如果用户选择他首先必须输入他的凭证的选项。

或在表单上放一个密码字段。取决于他们必须填写多少表格。

0

当用户帖子的形式和他们的会话超时,你应该确保你保存表单值的地方,然后要求用户重新登录。一旦他们重新认证了你,他们可以重新提交表格(因为他们的数据都不会丢失)。

1

监视超时并发布弹出消息以通知用户其当前会话将过期并显示“确定”或“取消”按钮。确定保持会话进行(即将计数器重置为另一个5分钟或10分钟 - 无论您需要什么) - 或者 - 取消以允许会话继续倒数至零,从而结束。
这是处理它的很多方法之一。

0

我开发了一些需要非常长的会话。当用户坐在机器上并完成他的工作后登录到页面上,登出。现在他可以使用系统几分钟或几个小时。为了使会话保持活动状态,直到他退出为止,我使用了javascript的计时器,它将服务器上的当前时间更新为anthem标签。

1

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

如果在应用程序前面没有用户,则会出现会话超时,以释放一些资源。

我认为你应该用更准确的时间来调整会话超时,以填写“典型的正常使用”形式。

您可能也有积极的:有一个JavaScript警告

  1. 显示非侵入性的警告(不弹出)给用户之前超时到期,这不能不说会话即将过期(和给出一个链接发送ajax请求来重置超时并删除该警告 - 这将避免用户丢失他当前正在输入的表单),并且还具有第二个JavaScript“线程”,如果该会话已过期,重定向到登录页面,并显示一条消息,说明会话现已过期。

它认为这是最好的,因为它避免了用户无用地填写复杂的表单,并在用户离开时处理这种情况。