Cod*_*ice 144
人们过去常常采用两种方法:
方法1:使用AJAX +重定向
这样,您可以使用JQuery或类似于Page2的方式在后台发布表单,同时用户仍会看到显示的page1.成功发布后,您将浏览器重定向到Page2.
方法2:发布+重定向到自己
这是论坛上的常用技巧.Page1上的表单将数据发布到Page2,Page2处理数据并执行需要完成的操作,然后对自身执行HTTP重定向.这样,浏览器记住的最后一个"动作"是第2页上的简单GET,因此在F5上不会重新提交表单.
Ang*_*dar 22
你需要使用PRG - Post/Redirect/Get模式,你刚刚实现了PR的P.你需要重定向.(现在几天你根本不需要重定向.见这个)
PRG是一种Web开发设计模式,可以防止一些重复的表单提交,这意味着,提交表单(发布请求1) - >重定向 - >获取(请求2)
Under the hood
Run Code Online (Sandbox Code Playgroud)
重定向状态代码 - 带有HTTP 302的HTTP 1.0或带有HTTP 303的HTTP 1.1
具有重定向状态代码的HTTP响应还将在位置标题字段中提供URL.通过具有该代码的响应来邀请用户代理(例如,web浏览器),以对位置字段中指定的新URL做出第二个(否则相同的)请求.
重定向状态代码是为了确保在这种情况下,Web用户的浏览器可以安全地刷新服务器响应,而不会导致重新提交初始HTTP POST请求.
Double Submit Problem
Run Code Online (Sandbox Code Playgroud)
Post/Redirect/Get Solution
Run Code Online (Sandbox Code Playgroud)
dav*_*vin 10
直接,你不能,这是一件好事.浏览器的警报是有原因的.这个帖子应该回答你的问题:
建议的两个关键解决方法是PRG模式,以及AJAX提交,然后是脚本重定位.
请注意,如果您的方法允许GET而不是POST提交方法,那么这既可以解决问题,又可以更好地适应约定.这些解决方案是在您想要/需要POST数据的假设下提供的.
100%确保同一表单永远不会被提交两次的唯一方法是在您发出的每个表单中嵌入一个唯一标识符,并跟踪在服务器上提交的标识符.存在的缺陷是,如果用户备份到表单所在的页面并输入新数据,则相同的表单将不起作用.
答案分为两部分:
确保重复的帖子不会弄乱服务器端的数据.为此,请在帖子中嵌入唯一标识符,以便您可以拒绝服务器端的后续请求.这种模式在消息传递术语中称为Idempotent Receiver.
确保用户不会被两者重复提交的可能性所困扰
你在2.下做的任何事情都不会完全阻止重复的提交.人们可以非常快地点击,黑客无论如何都可以发帖.你总是需要1.如果你想绝对确定没有重复.
您可以使用replaceStateJQuery的方法:
<script>
$(document).ready(function(){
window.history.replaceState('','',window.location.href)
});
</script>
Run Code Online (Sandbox Code Playgroud)
这是防止数据提交后由于回发而再次提交的最优雅的方式。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
131529 次 |
| 最近记录: |