这个问题一直在扼杀我,我无法找到解决方案。
我实现了一个基于PHP链接的评分系统。
一个人“A”可以在Twitter等社交网络上发布链接,当另一个人“B”打开此链接时,个人A赢得10分。
问题是当链接在Twitter上发布时,例如。它打开了很多次,给对方太多分数。
我试图在PHP中识别用户代理以确定人类何时打开链接,但有些推特点击如下:
Mozilla / 5.0(Macintosh; Intel Mac OS X 10_11_3)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 47.0.2526.111 Safari / 537.36
这显然可能是人类,但事实并非如此,因为该用户代理在同一秒内打开了两次链接,使用了2个不同的IP。 52.19.163.13和52.16.66.216。如果我没弄错的是亚马逊服务器。
即使我排除了robots.txt中的所有机器人,但也无法使用。这是我尝试识别人类的方式。
$app->get('/link/:code', function($codigo){
if(is_human() and !is_bot())
{
$res = $db->giveCoins($codigo);
if ($res !== 0) {
echo "Redirect to another page"; //cannot be a human interaction on this page
}else
{
echo "Robot";
}
}
});
这些是我用来分析用户代理的功能:
function is_bot(){
$botlist = array("Gigabot", "Googlebot",
"FlipboardProxy", "Purebot",
"facebookexternalhit","applebot",
"Google-HTTP-Java-Client",
"Chrome/33.0.0.0");
foreach($botlist as $bot){
if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false)
return true; // Is a bot
}
return false; // Not a bot
}
function is_human(){
$humanlist = array("Android","Safari",
"Chrome","OPR","Opera",
"Chromium","Firefox");
foreach($humanlist as $bot){
if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false)
return true; // Probably a human
}
return false; // Probably not a human
}
我不知道是否有更智能的方法来确定是否是打开链接的人。感谢您的关注