php - 防止无状态系统中重复的表单提交

标签 php laravel angular

在使用 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/

相关文章:

php - 是否需要检查每个 Controller 页面中的登录功能

php - 尝试获取行数时 PDO 上的 fetchColumn 错误

unit-testing - "Can' t resolve all parameters for MdDialogRef : (? )”测试NG2 Material Dialog组件时出错

php - 流明:异常处理程序 - 不捕获 QueryException 或 PDOException

Angular 4 : Http -> HttpClient - requestOptions

angular - npm 启动 : Failed start script 'ng serve'

php - 计算场所当前容量的最佳方法是什么?

php - 如何在 PHP 中连接字符串

php - 如何合并和求和具有相同 ID 值的项目的某些值

mysql - "General error: 1005 Can' t create table"Using Laravel Schema Build and Foreign Keys