提交表单,然后用户单击后退按钮时,如何阻止重新提交数据。我所阅读的很多内容都表明解决方案是实现PRG'模式'。
我找到了这个网页PRG Pattern,我想将其作为一个例子。
当我执行此代码时,我仍然可以单击后退按钮,然后重新单击提交按钮并让表单重新提交数据,即使它重定向。所以,我没有看到这应该如何阻止重新提交表单数据。
因此,以此页面为例,如何修改代码以防止此行为?
答案 0 :(得分:1)
PRG用于防止重新加载重新提交事件,您可以随时从浏览器返回页面并使用此提交表单
为了防止这种情况,您可以在呈现表单时发出令牌,并在提交时将其发送到服务器并查看是否是正确的令牌(通过将其置于会话中的某个位置)然后处理请求
更新:当你在表格中设置一些令牌时,会话
request.getSession().setAttribute("formToken", someCode);
现在提交表单,将令牌发送回服务器,并将其与会话中的匹配,如果两个匹配都允许请求,如果不匹配则意味着请求已经执行或某个人正在尝试模拟表单帖子并丢失提交数据中的表单标记,
现在如果您已经提交了一次,如果您使用浏览器按钮返回并再次重新提交,则代码将不匹配,这将阻止重新提交
使令牌检查事物同步以处理并行请求案例