我打算用PHP创建一个在线考试系统。如果用户意外关闭了窗口,我可以采取哪些步骤来恢复旧会话?
假设他已经回答了50个中的49个问题并且突然断电(并且没有UPS)或者他不小心关闭了窗口(即使是错误的,如果他在window.unload事件上的javascript提示时单击是)然后重新打开浏览器,一切都丢失了。我可以做些什么来阻止这种情况?
提前致谢:)
答案 0 :(得分:3)
您需要做以下两件事之一:
在用户计算机上保留当前状态 - 这必须通过cookie完成。
在服务器上保留当前状态。
第二个选项可能更可靠,它确实需要您与服务器保持联系。它还允许会话在另一台机器上恢复。
第一个选项可能更容易实现。
答案 1 :(得分:2)
提供一个登录系统,您可以在其中存储与用户登录相关的进度,或者只是使用在关闭浏览器时未过期的cookie(即将来设置到期日期)。
答案 2 :(得分:2)
您可以将会话参数存储在cookie中,该参数在30天后过期,例如
答案 3 :(得分:2)
您可以在每次转到下一个问题时保存其状态 - 如果它保存在会话中,您可以序列化会话并将其保存在与其帐户相关的数据库中。
如果他们再次打开浏览器,您可以加载已保存的会话,对其进行反序列化,然后继续离开它们。
答案 4 :(得分:2)
将会话ID存储为具有较长过期时间的cookie将解决问题但会引入新问题:在公共或共享计算机上,用户必须明确注销(即销毁会话)否则访问他们退出后的网站将继续他们的会话。
另一种解决方案是将“考试会话”绑定到用户,将其保留在数据库中并在有待审查的用户登录时继续会话。显然这需要一些编码: - )
答案 5 :(得分:1)
当然,如果停电,cookie可能还没有被刷新到磁盘,但除此之外(特别是如果你在一个页面上有多个问题),用户将失去少于你只保存在提交时的状态