gpt4 book ai didi

php - 检测从同一客户端发送到 php 的类似请求,但时间差异很小

转载 作者:行者123 更新时间:2023-11-29 14:15:43 25 4
gpt4 key购买 nike

我有一个php脚本,它从flash中的按钮接收$_['post']数据,有时用户双击该按钮,数据发送两次,这会导致服务器端的mysql更新冲突。我怎样才能在一点时间差内忽略来自同一客户端的 php 进一步请求?

最佳答案

您听说过 locking tables in mysql

如果您不提供更多详细信息,则无法提供详细示例,但基本示例是:

mysql_query( "LOCK TABLES updates READ WRITE", $connection);
$q = mysql_query("SELECT COUNT(*) FROM updates WHERE user = $currentUser AND time...");
if( mysql_result($q, 0, 0) != 0){
// Someone's already doing update; exit
mysql_query( "UNLOCK TABLES;");
return false;
}

// Require lock for ourselves
mysql_query( "INSERT INTO updates ...");
mysql_query( "UNLOCK TABLES;");

// Do the stuff on database

这可以确保当同一用户尝试执行此操作两次时,他或她将不被允许这样做(一次仅更新一次)。

您还有不同的选择:

  • 使用TRANSACTION
  • 生成用于更新的一次性 token (注意原子性,您必须执行DELETE FROM ...,然后检查受影响的行,因为SELECT; DELETE我的被中断或者你必须再次使用表锁定)
  • 我最喜欢的一个:button.enable=false,并根据请求完成button.enabled=true

注意:代码容易受到 SQL 注入(inject)攻击,并且您的 mysql_ 函数已过时。

关于php - 检测从同一客户端发送到 php 的类似请求,但时间差异很小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com