使用两个会话的PHP MySQL双重提交

使用两个会话的PHP MySQL双重提交,php,mysql,Php,Mysql,我有一个网店,用户会买东西 当用户访问my web时,他们的数据将临时保存在变量$user中作为数组 当用户购买东西时,如果他们的余额大于或等于他们想要购买的东西,就会进行检查,但是当一些用户试图同时使用两个浏览器购买东西时,就会出现问题,他们的余额只减少一次,应该是两次,因为他们使用两个浏览器购买了两次 我知道我可以在检查之前更新$user变量,但是我必须运行另一个对MySQL的查询,并且有很多订单 是否有任何SQL语法可用于防止此类攻击? 用于检查它们的平衡,并根据当前设置确保其正确,即使用

我有一个网店,用户会买东西 当用户访问my web时,他们的数据将临时保存在变量$user中作为数组 当用户购买东西时,如果他们的余额大于或等于他们想要购买的东西,就会进行检查,但是当一些用户试图同时使用两个浏览器购买东西时,就会出现问题,他们的余额只减少一次,应该是两次,因为他们使用两个浏览器购买了两次

我知道我可以在检查之前更新$user变量,但是我必须运行另一个对MySQL的查询,并且有很多订单

是否有任何SQL语法可用于防止此类攻击? 用于检查它们的平衡,并根据当前设置确保其正确

,即使用变量:

有人在同一个网站上使用两个浏览器试图用尽他们的平衡将是相当罕见的,大多数情况下,有人试图游戏你的系统

最后在处理订单时检查他们的余额,如果可以,则允许,否则不允许。对于那些偶尔做这件事的人来说,他们很快就会意识到错误

另一种选择:

最好检查真实的数据,而不是一个不可靠的变量,它必须是持久的,并且正如您所知,在不同的会话中不可用

我认为更好的方法是使用一些快速集中的持久性存储,比如Redis,非常容易学习,本质上它是一个存储在内存中的数组。然后,您可以存储他们的用户名或任何唯一ID,尽管他们可能在两个浏览器中拥有不同的密钥,但会有一个共同的唯一ID,您可以通过搜索唯一ID在两个会话中更新他们的信用值

然后,用户登录到的任何浏览器都将和其他浏览器一样更新

也许是个更好的主意:
除非应用程序需要,否则不要让用户登录到不同的浏览器/设备。当他们尝试登录时,说明已经在另一个地方登录,是否要登录该位置并在此处登录?etc

否。如果需要正确的answer@RiggsFolly因此,除了在处理订单之前更新变量之外,没有其他方法。。。好的。。。谢谢如果唯一一个保证数据正确的地方,你必须在那里寻找数据