在使用 PHP 时,为了避免重复的表单提交,我曾经生成某种唯一的 id,将其存储到 session 变量中,并将该 id 保存在表单中,这样在提交时我可以比较这些值,重新生成此时的 session 值。我从来没有认为这是一个很好的解决方案,但我从来没有想到/找到更好的解决方案。
现在,我正在做一个带有 PHP 后端(Lumen)的 Angular 前端,我正在努力想出一个不涉及我写入数据库的解决方案。除非我误解了什么,否则我不能在 Angular 和 PHP 之间使用 session ,对吧?所以这个解决方案行不通。我能想到的唯一的另一件事是在数据库中拥有一个键/对值,但我从来没有完全理解如何防止重复,例如意外双击,其中 session /数据库可能不会在第二次之前更新它的键提交开始处理。随着我对无状态系统的了解越来越多,感觉 session 不是放置此类内容的最佳位置?
总的来说,我在创建安全的后端系统以避免重复的表单时遇到了麻烦。使用 Angular,我总是可以通过防止单击按钮、触发 API 调用等来防止重复提交,但我也想添加后端保护,并且我很想听听专家是如何做到的。
最佳答案
在大多数情况下,这应该在前端受到保护。后端保护解决方案取决于您对独特请求的定义。您可以根据使请求唯一的属性创建复合键。例如。电子邮件 ID、请求 ID 或任何一组请求参数
数据库不会接受重复的键,您可以捕获异常并在前端优雅地处理它。
例如。新闻通讯订阅请求申请 - 请求的唯一性由电子邮件地址和新闻通讯类型决定
关于php - 防止无状态系统中重复的表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043378/