SendRedirect“防止重新提交”保证?

时间:2013-04-10 01:03:30

标签: java servlets

嗨,我是服务器端编程(java)的新手,正在阅读SendRedirect与Forward之间的区别。 从Post-redirect-get pattern开始,它解释了这将阻止通过点击刷新按钮重新提交修改。但是,如果服务器端后处理很重,并且在服务器处理帖子期间,并且在发送回3xx重定向之前,用户刷新页面怎么办?服务器如何知道忽略连续的第二个传入请求?

1 个答案:

答案 0 :(得分:0)

我明白你的观点,事实上PRG保证只有在完成先前的重定向时才能防止双重提交,包括后退按钮,因此浏览器现在可以发送GET请求。

  

但是如果在进行重定向之前有一个长进程正在运行会发生什么?

我有两种已知的方法来处理这种情况:

  • 如果您在重定向之前有一个长时间的流程,那么PGR目标将不会被满足是合乎逻辑的;所以,如果有人遇到这种麻烦,then long-time process should be consider to run in separate thread那么您只需将重定向发送到一个页面,您可以向用户显示进度(可选),这类似于Ajax。

  • 这个我还没有尝试过,但它确实是合乎逻辑的 Synchronization Token pattern ,所以它基本上是基于在页面中设置隐藏的令牌,然后当POST请求是发送到服务器后,您将以令牌和store it into session的任意数字递增,因此,下次用户点击提交按钮或刷新页面时,您可以compare the token每当您的页面出现在会话,这是一种替代方法,可以避免一遍又一遍地处理与同一用户关联的相同请求。

如果您想查看有关http://www.deepakgaikwad.net/index.php/2009/03/19/post-redirect-get-design-pattern.html

的更多信息,请与我联系

希望它有用......