我们都知道旧的"禁用提交按钮"技巧,但处理多个提交服务器端的最佳方法是什么?我有一个应用程序,一个表单只发送一次绝对至关重要 - 它处理一张信用卡.我没有写出它现在是怎么回事,但作为一个快速解决方案我投入了禁用提交技术,但是一些不耐烦的用户已经被禁用了两次.
那么,有什么方法可以避免这种情况呢?我可以想到一些 - 我过去曾使用过一些 - 但我想看看是否有任何关于如何解决这个问题的"最佳实践".我正在使用PHP,但我对概念更感兴趣.
编辑:我知道令牌技术,这是我过去使用的,这个问题或多或少是为了看看我的方法是否与其他优秀的程序员使用的方法一致.
一种非常有效的方法是提交令牌和请求,并保留使用过的令牌列表.如果令牌无效,或者令牌已被处理,则中止.
令牌可以像递增整数一样简单,存储在隐藏文本字段中,也可以对其进行加密以提高安全性.通过在创建页面时生成令牌,加密它,然后确认令牌已生成且尚未处理,可以使此功能更加健壮.
在隐藏的表单字段中包含随机唯一标记.然后在后端,您可以检查之前是否已提交.
这通常是一个好主意,因为它也可以帮助您抵御XSS攻击.
您也可以简单地测试是否在最后一分钟(或第二,取决于服务器的延迟)进行了相同的事务.大多数人不会在一分钟内使用相同的卡购买两本相同的书(或其他).如果您在最后一刻保留信用卡付款的缓存,并检查您即将制作的信用卡是否与您刚刚完成的信用卡支付相同(卡号相同,金额相同),您可能会发现重复信息.