php - Acquire_lock() 不起作用。机器人仍然快速发送请求。 PHP+AJAX

标签 php mysql ajax locking bots

我昨天发布了一个问题,涉及有人使用机器人来利用我的投注网站并快速多次按“滚动”,以获得相同的滚动数字。

Stop bot sending multiple requests quickly. PHP + AJAX

有人给我的答案是使用锁定。于是我就这么做了,但他回来了,但没用。见下文:

enter image description here

有人可以看看我的代码并告诉我我做错了什么或者这还不够。

该页面使用ajax发送请求,您可以找到上一个问题的代码,因为我不认为它相关。

它将其发送到一个 php 文件,其摘录如下:

include '../../inc/functions.php'; //This is where the lock functions are stored.

$lock = acquire_lock("foo");

if (empty($_GET['_unique']) || mysql_num_rows(mysql_query("SELECT `id` FROM `players` WHERE `hash`='".prot($_GET['_unique'])."' LIMIT 1"))==0) exit();

$newSeed=generateServerSeed();
mysql_query("UPDATE `players` SET `server_seed`='$newSeed' WHERE `id`=$playerinv[id] LIMIT 1");

$settings=mysql_fetch_array(mysql_query("SELECT * FROM `system` LIMIT 1"));

$player=mysql_fetch_array(mysql_query("SELECT * FROM `players` WHERE `hash`='".prot($_GET['_unique'])."' LIMIT 1"));
$player['server_seed_']=$player['server_seed'];
$player['server_seed']=(double)substr($player['server_seed'],27);
// More content...
release_lock($lock);
?>

$newseed 是具有卷号的变量。正如您所看到的,每次运行时通常都会生成一个新的。

functions.php 内部如下:

<?php
function acquire_lock($name) {
return fopen($name, "rw");
}
function release_lock($lock) {
fclose($lock);
}
?>

感谢您花时间阅读并让我知道您的想法/解决方案。

最佳答案

function acquire_lock($name) { 
    $file = fopen($name, "rw"); 
    flock($file, LOCK_EX);
    return $file;
} 
function release_lock($file) { 
    flock($file, LOCK_UN);
    fclose($file); 
}

真正的锁定不是打开或关闭文件,而是flock函数。

关于php - Acquire_lock() 不起作用。机器人仍然快速发送请求。 PHP+AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29710997/

相关文章:

Php 迭代数组并更新 mysql 的最快方法?

php - 将一维数组转换为多维数组

php - mysqli 连接错误后无法重定向

javascript - Ajax 在执行下一个函数之前等待 Api 完成

python - Django-Rest-Framework POST 对象字段必需

php - 获取 xml 文件以查找和替换文本。 PHP

php - 尝试使脚本工作以从 php 启动停止 Shoutcast Dnas 和 Shoutcast Transcoder

php - 如何在php中的一页中使用2个数据库连接

php - 如何获取逗号分隔值对应的记录?

jquery - 在 jQuery AJAX GET 调用中传递请求 header