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