放置计时器和监视器并在其到期时采取某些行动

时间:2012-11-12 17:46:26

标签: asp.net asp.net-mvc-3

我正在开发一个在线测验网站,用户可以在其中进行测试(多项选择)。我要求在测试时设置一个计时器,如果测试的制造商将时间设置为30分钟,计时器将放在页面顶部倒计时,现在我想监视服务器端的计时器到达00:00,测试将停止并显示所获得的标记。

我考虑过的解决方案:

1)要使用JS插件并在其到期时对某些location.href执行ActionResult将结束测试。

2)创建一个会话并在给定时间后清除它,然后在呈现每个问题之前检查该会话是否已过期。

我对使用基于javascript的解决方案的担忧是它的健壮性,我想实现服务器端解决方案。请帮我找到正确的道路......

问候。

1 个答案:

答案 0 :(得分:1)

在浏览器中使用计时器时,无法验证它是否按预期运行。用户可以禁用javascript并绕过你的限制;他们甚至可以改变你的JavaScript。所以完全依赖javascript不是一种选择。

最佳解决方案是验证服务器端的回发。您可以在客户端使用javascript通知用户,以便他们知道剩余多少时间,服务器端验证他们没有超过时间限制。如果需要同步,那么您可以每隔一段时间重新ping一次javscript以重新同步。

扩展答案 测试开始的时间应该在服务器端。每当用户点击开始测试或其他开始按钮开始测试时。服务器应该记录当前时间 - 可能在会话中,甚至在数据库中。

然后,应通过javascript和预期结束时间通知用户剩余时间。只要用户提交问题或对服务器执行另一次回发,就会更新这些内容。

结束时间将是模糊部分。如果javascript正确地完成了它的工作;你可以通过这个(或window.href等)通知用户他们的测试已经结束。如果javascript没有工作;然后,用户将在下次尝试向服务器提交内容时收到通知。

无论哪种方式,都应该清楚地告知用户这是预期的结束时间,以及每次加载页面时剩余的时间。