CodeIgniter会话由机器人发送垃圾邮件

时间:2013-11-19 17:13:33

标签: php codeigniter session codeigniter-2 bots

我有一个每天大约有2000名访客的网站,该网站被各种搜索引擎机器人发送垃圾邮件。我尝试将会话过期时间减少到20分钟,但仍然有很多mysql_slow_queries。所以我在查看文章Google crawler, cron and codeigniter sessions,完全忽略会话表中的机器人,但他们的做法是,忽略IPs,但是我正在分析数据库我发现同一个机器人使用不同的IPs。我注意到机器人每次都使用相同的用户代理,因此忽略用户代理是否安全?可以采取哪些必要步骤来避免慢速查询并忽略机器人?

一些SLOW查询

INSERT INTO `ci_sessions` (`session_id`, `ip_address`, `user_agent`, `last_activity`, `user_data`) VALUES ('619bfd8ef4171480645feb17a15323ee', '219.92.135.144', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15', 1384875135, '')

INSERT INTO `ci_sessions` (`session_id`, `ip_address`, `user_agent`, `last_activity`, `user_data`) VALUES ('fa48b5168b8e84d90dc9b87ce65dfc89', '66.249.74.112', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)', 1384875522, '')

2 个答案:

答案 0 :(得分:9)

user_agent.php中修改/config,然后添加您在会话中看到的机器人,将它们添加到机器人部分,以消除会话记录。

// There are hundreds of bots but these are the most common.
$robots = array(
    'googlebot'     => 'Googlebot',
    'msnbot'        => 'MSNBot',
    'baiduspider'   => 'Baiduspider',
    'bingbot'       => 'Bing',
    'slurp'         => 'Inktomi Slurp',
    'yahoo'         => 'Yahoo',
    'askjeeves'     => 'AskJeeves',
    'fastcrawler'   => 'FastCrawler',
    'infoseek'      => 'InfoSeek Robot 1.0',
    'lycos'         => 'Lycos',
    'yandex'        => 'YandexBot'
);

您可以减少机器人数量,但不会消除它们。此用户代理进程可用于创建MY_session.php,然后为与机器人匹配的代理创建会话。

修改
我继续在github上创建了这个并记录在这里:
http://blog.biernacki.ca/2014/01/codeigniter-keeping-bots-out-of-your-sessions-table-or-how-i-cleaned-up-my-sessions/

享受

答案 1 :(得分:2)

如果您想完全阻止僵尸程序,可以尝试使用robots.txt吗?如果您只想忽略正在创建的会话,那么检查用户代理以查找“GoogleBot”等字符串可能是一个很好的解决方案。但是我认为你需要扩展Session类才能做到这一点。