如何禁用servlet中的后退按钮?

时间:2012-05-05 18:33:12

标签: servlets back-button

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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