Django:管理会话变量以控制浏览器的后退按钮
我正在创建一个基于网页的模拟测试卷,这个测试需要相对安全。
具体需求是: 每个问题只能尝试和回答一次。 所有的问题都是选择题。 一旦回答了一个问题并按下提交按钮,那么这个问题就不能再出现了,无论是通过后退按钮还是其他方式。
如果浏览器崩溃或者系统崩溃,学生应该能够返回到最后一个正在尝试但还没有回答和提交的问题。
在使用Django实现这个功能时,应该采取什么样的最佳策略?如何在按下提交按钮后自动结束会话?还有,如何确保通过按后退按钮无法访问已经尝试和回答过的问题?
我尝试过在网上搜索,但找不到能更好指导我的资源。我看过Django会话的文档,但不确定自己是否知道正确的方法。任何建议都能帮助我。
1 个回答
3
那么,如何确保用户按下返回按钮后,无法访问已经尝试并回答过的问题呢?
可以使用“提交-重定向-获取”的方法。 http://en.wikipedia.org/wiki/Post/Redirect/Get
一旦按下提交按钮,如何自动结束会话?
这个问题其实不太合理。你并不需要“结束”会话。你需要做两件事。
更新数据库中这个用户的记录,标明他们完成了多少内容。
更新会话信息,标明他们完成了多少内容。
不要试图去“结束”会话。要保持会话信息(以及底层数据库)的正确性。
结束会话只会让他们重新登录——这只是让人烦恼而已。而且,当他们再次登录时,数据库必须是正确的,否则他们会重新开始测试。所以,你只需要保持数据库和会话信息的一致性。