当用户意外关闭浏览器时如何恢复旧会话?

时间:2010-07-01 12:51:44

标签: php

我打算用PHP创建一个在线考试系统。如果用户意外关闭了窗口,我可以采取哪些步骤来恢复旧会话?

假设他已经回答了50个中的49个问题并且突然断电(并且没有UPS)或者他不小心关闭了窗口(即使是错误的,如果他在window.unload事件上的javascript提示时单击是)然后重新打开浏览器,一切都丢失了。我可以做些什么来阻止这种情况?

提前致谢:)

6 个答案:

答案 0 :(得分:3)

您需要做以下两件事之一:

  1. 在用户计算机上保留当前状态 - 这必须通过cookie完成。

  2. 在服务器上保留当前状态。

  3. 第二个选项可能更可靠,它确实需要您与服务器保持联系。它还允许会话在另一台机器上恢复。

    第一个选项可能更容易实现。

答案 1 :(得分:2)

提供一个登录系统,您可以在其中存储与用户登录相关的进度,或者只是使用在关闭浏览器时未过期的cookie(即将来设置到期日期)。

答案 2 :(得分:2)

您可以将会话参数存储在cookie中,该参数在30天后过期,例如

答案 3 :(得分:2)

您可以在每次转到下一个问题时保存其状态 - 如果它保存在会话中,您可以序列化会话并将其保存在与其帐户相关的数据库中。

如果他们再次打开浏览器,您可以加载已保存的会话,对其进行反序列化,然后继续离开它们。

答案 4 :(得分:2)

将会话ID存储为具有较长过期时间的cookie将解决问题但会引入新问题:在公共或共享计算机上,用户必须明确注销(即销毁会话)否则访问他们退出后的网站将继续他们的会话。

另一种解决方案是将“考试会话”绑定到用户,将其保留在数据库中并在有待审查的用户登录时继续会话。显然这需要一些编码: - )

答案 5 :(得分:1)

  • 持续将页面状态保存到cookie中(例如,在每次表单更改时 - 因此您具有当前页面的状态);
  • on submit,将状态保存到会话中(或甚至保存到未完成表单的数据库中)并从cookie中清除它(因此您将服务器端的检查的整体状态保存起来,因此您可以从cookie中清除它)。
  • 完成后,清除cookie和会话。

当然,如果停电,cookie可能还没有被刷新到磁盘,但除此之外(特别是如果你在一个页面上有多个问题),用户将失去少于你只保存在提交时的状态