Поддержка анонимных пользователей против бота Google - PullRequest
0 голосов
/ 12 мая 2010

В моем веб-приложении есть класс User, представляющий пользователя, вошедшего в систему. Каждый раз, когда пользователь просматривает страницу, экземпляр User заполняется на основе данных аутентификации, предоставленных в файлах cookie.

Экземпляр User создается, даже если в систему входит анонимный пользователь, и соответствующая новая запись создается в таблице User в базе данных.

Этот подход позволяет мне сохранять некоторую информацию о состоянии для текущего пользователя независимо от его типа.

Однако проблема с этим подходом заключается в том, что бот Google и другие нечеловеческие веб-организмы сканируют мои страницы. Каждый раз, когда бот начинает ходить по сайту, в базе данных будут создаваться тысячи бесполезных записей, каждая из которых будет использоваться только для одной страницы.

Вопрос: что является лучшим компромиссом? Как поддержать анонимных пользователей, сохранить их состояние и не получить слишком много накладных расходов из-за ботов без файлов cookie?

Ответы [ 2 ]

0 голосов
/ 12 мая 2010

Обычно можно проверить заголовок User Agent запроса, он будет включать в себя такие вещи, как YahooSlurp или GoogleBot или SomeOtherTypeOfBot.

Если вы используете .NET, в Page.Request.Browser.Crawler есть свойство, которое должно указывать, является ли он ботом. Я не уверен, если / как это представлено на других платформах

Имейте в виду, что некоторые сканеры склонны скрывать тот факт, что они являются сканером (я видел, что MSN делал это недавно), и просто отправлять поле User Agent, которое выглядит как обычный браузер, так что нужно фильтровать их по диапазону IP-адресов, но это просто становится игрой в хлам, так что вы можете в конечном итоге просто жить с этими делами.

0 голосов
/ 12 мая 2010

Я думаю, что лучшая стратегия здесь - вручную добавить «исключение» для ботов. Вы можете сделать одно из двух:

A. Не создавайте пользовательский объект для ботов (это лучше всего делать, если ваше приложение разрешает нормальный поток) Б. Создайте один объект User для бота и используйте его каждый раз, когда он пытается загрузить страницу.

...