我有一个每天大约有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, '')
答案 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
类才能做到这一点。