处理网络应用程序中会话超时的最佳方法?
Posted
技术标签:
【中文标题】处理网络应用程序中会话超时的最佳方法?【英文标题】:Best way to deal with session timeout in web apps? 【发布时间】:2010-09-11 23:24:05 【问题描述】:我目前正在构建一个用于工厂/仓库类型位置的内部 Web 应用程序。用户将在几个人之间共享一台 PC,因此我们需要有一个相当短的会话超时,以防止人们四处走动并让应用程序处于登录状态,这样其他人就可以来到 PC 并使用前一个用户的用户名进行操作。
这样做的问题是,当用户当前正在向表单输入信息时,会话可能会超时,尤其是当他们需要很长时间时。
您将如何以用户友好的方式处理这个问题?
【问题讨论】:
【参考方案1】:让服务器了解用户正在积极输入信息的事实。 例如,如果用户按下 TAB 键或用鼠标单击字段,则向服务器发送消息。 最终的解决方案取决于您。
【讨论】:
我认为这对我的情况最有效。它比弹出一个对话框并显示用户可能不会理解的消息更具侵入性。而且它不会通过不断地轮询服务器来无限期地保持会话活动。【参考方案2】:使用 AJAX 定期存储部分填写的表单的内容,这样他们在被系统引导时不会丢失工作。哎呀,一旦你这样做了,如果他们花时间打字,请使用 AJAX 来防止他们的会话超时。
【讨论】:
【参考方案3】:最好的建议可能是要求用户在完成后关闭浏览器窗口。使用会话cookies,会话将在浏览器关闭或30分钟超时时自动结束(可以更改afaik)。
由于默认情况下,一旦加载页面,浏览器和服务器之间就没有交互,因此您必须让 javascript 在表单页面的后台与服务器联系以刷新会话,但这似乎有点过这么小的问题就麻烦了。
【讨论】:
【参考方案4】:如果会话超时时间太短以至于用户没有时间填写表格,我会放置一个 AJAX 脚本,每隔几分钟向服务器发出一个 http 请求,以保持会话处于活动状态。我只会在用户必须填写某些内容或已经开始填写某些内容的页面上这样做。
另一种解决方案是使用会话超时提醒脚本,该脚本会弹出一个对话框来提醒用户会话即将超时。弹出窗口应显示“注销”和“继续使用应用程序”,发出 ajax 请求以更新会话超时。
【讨论】:
【参考方案5】:也许在这种情况下,保持活动的 javascript 进程可能会有所帮助。如果脚本捕获了一些关键触发器,它会向服务器发送“我仍在输入”消息以保持会话处于活动状态。
【讨论】:
【参考方案6】:您是否考虑过将表单分成更小的块?
【讨论】:
这对用户来说可能有点烦人,但是当用户搞砸时,拆分服务器端验证可能不会那么烦人。【参考方案7】:监控超时并发布一个弹出窗口以通知用户他们当前的会话将过期并显示“确定”或“取消”按钮。可以继续进行会话(即将计数器重置为另外 5 分钟或 10 分钟 - 无论您需要什么) - 或 - 取消以允许会话继续倒计时至零,从而结束。 这是处理它的众多方法之一。
【讨论】:
【参考方案8】:对我来说,使用 JavaScript“线程”保持会话打开是个坏主意。
如果应用程序前面没有用户,会话超时的存在是为了释放一些资源。
我认为您应该将会话超时调整为更准确的时间,以便以“典型的正常使用”填写表格。
您也可以通过以下方式积极主动:
-
在超时到期之前有一个 JavaScript 警报向用户显示非侵入性警告(不是弹出窗口),表示会话即将到期(并提供一个链接以发送 ajax 请求以重置超时并删除该警告 - 这将避免用户丢失他当前正在输入的表单),
还有第二个 JavaScript“线程”,如果会话已过期,它会重定向到登录页面,并显示会话已过期的消息。
它认为这是最好的,因为它避免了用户填写复杂的表格,并在用户离开时处理。
【讨论】:
【参考方案9】:作为技术解决方案的替代方案,您可以让您的应用程序在每次完成特定工作(例如填写表格)时询问用户他是否想继续从事另一项工作,或者他是否愿意完毕。 Yould 可以有一个带有菜单选项的开始屏幕,如果用户选择一个选项,他首先必须输入他的凭据。
或者在表单上输入密码字段。取决于他们必须在一个会话中填写多少表格。
【讨论】:
【参考方案10】:当用户发布表单并且他们的会话超时时,您应该确保将表单值保存在某处,然后要求用户再次登录。一旦他们重新验证了您的身份,他们就可以重新提交表单(因为他们的任何数据都不会丢失)。
【讨论】:
【参考方案11】:我开发了一些需要很长时间的东西。用户坐在机器上时登录了一个页面,完成工作后退出。现在他可能会使用系统几分钟或几个小时。为了让会话保持活跃直到他退出,我使用了带有 javascript 的计时器,它转到服务器并用服务器上的当前时间更新了 anthem 标签。
【讨论】:
以上是关于处理网络应用程序中会话超时的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用JQuery和ColdFusion处理会话超时警告?