Сеанс 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, '')
Author: Community, 2013-11-19

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/

Наслаждайтесь

 9
Author: Jakub, 2014-01-11 01:30:51

Если вы хотите полностью заблокировать ботов, может быть, попробуйте использовать robots.txt? Если вы хотите игнорировать только создаваемые сеансы, то проверка агента пользователя на наличие строк типа "Googlebot" может быть хорошим решением. Но я думаю, что для этого вам нужно было бы расширить класс Session.

 1
Author: Paulina, 2013-11-19 17:16:11