2012-11-30 38 views
1

当提交表单,然后用户单击后退按钮时,如何防止数据被重新提交。我读过的很多内容表明解决方案是实施PRG“模式”。在java servlet中阻止后退按钮重新提交表单数据

我发现这个网页PRG Pattern,我想用作一个例子。

当我执行此代码时,我仍然可以单击后退按钮,然后重新单击提交按钮并让表单重新提交数据,即使它重定向。所以,我没有看到如何防止重新提交表单数据。

因此,以此页面为例,如何修改代码以防止此行为?

回答

1

PRG是用来防止重装重新提交事件,你可以随时返回到页面的浏览器,并与该

提交表单,以防止这一点,你可以发出在渲染的形式标记,并同时提交其发送到服务器看看是否是正确的令牌(通过将其放在某处会话),然后处理请求

更新:当你所服务的形式设置一些象征性的会议

request.getSession().setAttribute("formToken", someCode); 

现在提交的形式,发布令牌回到s erver,并将其与来自会话的匹配,如果两个匹配都允许该请求,如果不匹配,则意味着该请求已经被执行或者某个人试图模拟表单发布并且丢失提交的数据中的表单令牌,

所以现在,如果你已经提交了一次,如果你回到使用浏览器的按钮,并重新提交它的代码将不匹配,它会阻止重新提交

做同步处理并行请求的情况下

令牌检查的事
+0

“把它放在会话中的某个地方”如果你可以用我链接的页面上的代码作为例子来描述如何做到这一点,那将是非常有帮助的。你不一定要抓住那个代码并运行它,只是描述这个过程...... :) – NobodyReally

+0

更新的答案与详细信息 –

+0

我想我有点密集。但是,如果我在doGet(提供表单)中使用上面的代码片段,然后在doPost中匹配它们,它们将始终匹配,因为当我单击后退按钮时,doGet会被执行以设置属性... – NobodyReally

相关问题