Есть такая замечательная вещь,
CSS History Hack называется. Это такой очень простой и изящный способ узнать, посещал ли юзер какой-то конкретный сайт. Ставим на страницу ссылку на проверяемый сайт, делаем для неё разные стили
a и
a:visited, затем при заходе пользователя смотрим, как эта ссылка ему отобразилась и делаем соответствующий вывод. Даже без яваскрипта работает, если сделать
a:visited { background: url(...) };. Красота! Обожаю этот хак (это, конечно, хак, потому что документированные возможности браузера используются не по назначению для получения личной информации). У меня прям в душе всё поёт каждый раз, как я о нём вспоминаю :)
Ну я, короче, к чему о нём вспомнил. Можно попробовать использовать этот хак как дополнение к каптче. Если пользователь, зашедший к вам на сайт, подвержен этому хаку, и если он заходил на гугл, яндекс или там лайвджорнал.ком какой-нибудь, то он 100% не бот, потому что у бота нет браузера. Осталось только придумать секурный способ передать на сервер эту информацию, и всё, можно живым людям не надоедать проверками.