Вчера я опубликовал вопрос о том, что кто-то использует бота для использования моего сайта ставок и очень быстро нажимает «Бросок», чтобы получить одинаковые номера бросков.
Прекратите отправку ботом нескольких запросов быстро. 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);
}
?>
Спасибо, что нашли время, чтобы прочитать и дайте мне знать, что вы думаете / решения.
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
функция.
Других решений пока нет …