0

我创建了一个 Web 应用程序并将其部署在 tomcat7 中。这个应用程序的工作方式如下:用户通过适当的身份验证登录,然后显示一个测试页面(html),用户选择答案并提交测试。提交后调用另一个 servlet,向用户显示分数。

这里的问题是,如果用户返回(通过浏览器后退按钮)并再次提交测试,则在获得分数后,分数正在被更改。我应该怎么做才能防止这种情况发生?

4

1 回答 1

1

通常的技巧(某些框架为您提供)是,当生成表单时,生成一个令牌,将其存储在用户的会话中,以及表单的隐藏字段中。提交表单后,您将收到的令牌与会话中的令牌进行比较。如果它们匹配,则从会话中删除令牌并继续提交表单。

如果用户返回并重新提交表单,会话中将不再有任何令牌,并且您将显示错误消息而不是处理表单提交。

另一种方法是对表单处理进行编码,以使提交具有幂等性。例如,您可以检查问题是否已经被用户回答,而忽略第二个答案,而不是盲目地增加分数。

于 2012-05-05T19:17:25.717 回答