Acquire_lock()不起作用。 Bot仍在快速发送请求。 PHP + AJAX

时间:2015-04-17 23:22:18

标签: 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是具有滚动编号的变量。正如您所看到的,通常会在每个运行时生成一个新的。

inside functions.php内容如下:

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

感谢您抽出宝贵时间阅读并告诉我您的想法/解决方案。

1 个答案:

答案 0 :(得分:0)

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函数。