【发布时间】:2012-03-25 07:05:59
【问题描述】:
我试过了:
POST/REDIRECT/GET 方法,但这不能防止同一表单的多个实例(例如,如果用户在两个单独的窗口中打开 form.php,并在窗口 1 中提交表单,他们可以仍然在窗口 2 中提交)
UNIQUE TOKEN 方法,该方法在加载表单时将 uid 生成到会话变量中,并在处理表单时取消设置,但如果用户打开了其他不同的表单,则从取消设置变量这些其他表格也是如此,因此它们被视为“已处理”。
【问题讨论】:
-
所以每个表单都有一个唯一的令牌会话。
-
如果您多次打开表单(尤其是在使用不同浏览器的情况下),您无法阻止这种情况……为什么他们还要多次打开表单?一旦提交按钮被点击,我就会禁用它,这样他们就不会意外提交两次。
-
我试过这样做,但是如果用户打开一个不同的表单,它会为会话分配一个新的令牌并使以前的表单无效
-
我看到你能意识到它是数据库驱动的唯一方法。但这需要用户标识
-
@toby 由于 datbaase 事务的性质,多次提交可能会失去完整性,所以我试图从各个方面对其进行密封。您的方法只是防止用户在同一页面上多次按下提交按钮。