【问题标题】:Acquire_lock() not working. Bot still sending requests quickly. PHP + AJAXAcquire_lock() 不工作。机器人仍在快速发送请求。 PHP + AJAX
【发布时间】:2015-06-25 00:01:33
【问题描述】:

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

Stop bot sending multiple requests quickly. PHP + AJAX

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

谁能看看我的代码并告诉我我做错了什么或者这还不够。

页面使用 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);
}
?>

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

【问题讨论】:

    标签: php mysql ajax locking bots


    【解决方案1】:
    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函数。

    【讨论】:

    • 我对此进行了测试。我添加了一个 sleep(100);到 php 文件,按“滚动”,在它等待的同时,我将它重新更新为 sleep(0.2);并使用另一个帐户在另一个浏览器中滚动,它没有等待。我猜这意味着它不起作用?
    • @Ben 使用 sleep(5) 试试看?
    • 最终让它发挥作用。问题是它一开始就没有正确的权限。
    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2021-10-12
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多