Сеанс CodeIgniter, спамленный ботами
У меня есть сайт с примерно 2000 посетителями в день, и сайт забит различными ботами из поисковых систем. Я попытался сократить время истечения сеанса до 20 минут, и все равно получаю много запросов mysql_slow_. Итак, я изучал статью Сеансы Google crawler, cron и codeigniter, чтобы полностью игнорировать ботов из таблицы сеансов, но то, как они это делают, игнорирует IPs
, но, анализируя базу данных, я вижу, что один и тот же бот использует разные IPs
. Я заметил, что боты каждый раз используют один и тот же пользовательский агент, поэтому безопасно ли игнорировать пользовательские агенты вместо этого? Каковы могут быть некоторые из необходимых шагов, чтобы избежать медленных запросов и игнорировать ботов?
Некоторые из МЕДЛЕННЫХ запросов
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 answers
Отредактируйте свой 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 и задокументировал here:
http://blog.biernacki.ca/2014/01/codeigniter-keeping-bots-out-of-your-sessions-table-or-how-i-cleaned-up-my-sessions/
Наслаждайтесь
Если вы хотите полностью заблокировать ботов, может быть, попробуйте использовать robots.txt
? Если вы хотите игнорировать только создаваемые сеансы, то проверка агента пользователя на наличие строк типа "Googlebot" может быть хорошим решением. Но я думаю, что для этого вам нужно было бы расширить класс Session
.