昨天我发布了一个问题,有人使用机器人来开发我的投注网站,并且非常快速地按“滚动”多次,以获得相同的滚动数字。
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是具有滚动编号的变量。正如您所看到的,通常会在每个运行时生成一个新的。
inside functions.php内容如下:
<?php
function acquire_lock($name) {
return fopen($name, "rw");
}
function release_lock($lock) {
fclose($lock);
}
?>
感谢您抽出宝贵时间阅读并告诉我您的想法/解决方案。
答案 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
函数。