Как стать автором
Обновить

Комментарии 14

Способов "в лоб" вижу два:

1. Использование манны (в хабре это патроны). Пользователь получает по n-манны за определённые действия, или просто по времени, которую тратит, как ему вздумается. Первый раз он ее получает не сразу.

2. Пользователь после регистрации попадает в песочницу, и не может голосовать. Критерии выхода из "песка" на Ваш выбор.
Оба варианта хороши. Теоретически, можно их оба и использовать.
Вариант с условной маной интересен тем, что юзер своими постами может зарабатывать определенное ее число, а потом тратить на свое усмотрение. За топик проголосовать - 10 единиц, за коммент - 5, и так далее. А там сам пусть решает, за что лучше. Хм... Хотя, наверное, голосование за топик лучше не ограничивать вообще. На Хабре ограничено? Я не знаю, потому что не имею привычки голосовать за все топики подряд :)
Угу, и вместо ограничения на голосования мы получим кучу тупых топиков от юзверей, пытаюшихся добить карму до возможности голосовать.
А какие тогда могут быть варианты? Случай с патронами тогда не подходит, потому что если человек зарегил 10 акков, то ему хватит и по одному патрону на каждый акк, чтобы задрать свой топик. Единственный вариант в этом случае - может, действительно подсчитывать карму юзера и число успешных его топиков и комментов (заплюсованные топики или нейтральные/заплюсованные комменты)? Черт его знает.
Теоретически, можно еще подсчитывать среднее число постов за день, и следить за тем, чтобы юзер не постил слишком часто :), но это особо извращенный и ресурсоемкий способ.
Если пользователь зарегистрировал много ников, то писать под всеми ними он не будет. Значит через какое-то время можно устроить фильтрацию и перерасчет голосования. Убрать голосам "мёртвых душ".
Проблема не в том, чтобы время от времени удалять мертвые души, а в том, чтобы запретить этим душам голосовать.
Хотя, я тут вижу такой полезный момент: попробовать ввести ограничение по той же, скажем, карме. Если 0 или минус, то вообще не разрешать голосовать. Таким образом пустышки отсеются. Наверное :)
C нулем и сейчас нельзя голосовать.
Блокировать IP и тем более диапазон IP- это очень неудобно. У меня, например, выход в интернет через прокси-сервер локалки, внешний IP-адрес не докуплен. Локалка не очень-то и маленькая. Я и так страдаю, что не могу ничего скачать с "Рапидшары"(почти всегда получаю от неё сообщение, что с моего IP только что качали).
Не думаю, что пользователь,сразу получивший отказ в регистрации будет ждать час-два (пять? Выставлять мелкий таймаут - бессмысленно). А если очень сильно захочется зарегистрировать дополнительне логины, то можно будет пользоваться анонимными прокси-серверами. Т.е. защиты особо ни какой, а неудобств - масса.
А вот идеи с "песочницами", "маннами" и т.п. заслуживают внимание.
Хабрахабр как раз и пытается решить эту проблему "современными" методами. Основная идея - отсрочить способность юзера совершать активные действия. Все перечисленные Вами способы имеют смысл, хотя и немного старомодны. Современная тенденция - комбинирование этих способов, причем не в "жесткой" манере (может - не может), а в "мягкой": показался пользователь подозрительным - увеличили ему срок пребывания в "песочнице".

Ваша идея с email вовсе не бессмысленна - во первых, практика показывает, что многим лень регистрировать кучу ящиков (это же усложняет процесс создания виртуалов), а во-вторых - можно отсылать письмо-подтверждение с задержкой (5-10 минут и больше, если пользователь показался "подозрительным"). Разумеется, пользователь без подтвержденного email при этом не может писать, голосовать и т.п.

Кстати, поясните Ваш пункт 4 - что значит "пользовательские сессии" и чем это отличается от п.3?
Сессия создается на стороне сервера при открытии браузером сайта и хранится на сервере (в отличие от кук, которые хранятся локально) до тех пор, пока не срабатывает тайм-аут (юзер неактивен какое-то время). Так что достаточно закрыть браузер и снова его открыть, чтобы была создана новая сессия. Ничего не могу сказать по поводу PHP-сессий, но в ASP.NET в сессиях можно хранить какие-то нужные переменные.
Насчет подозрительных пользователей - каким образом вычислять его подозрительность?
Про сессии я это к тому, что механизм идентификации сессии все тот же - куки. Т.е. пункты 3 и 4 рядом смотрятся некорректно - с точки зрения клиента это одно и то же.

Подозрительность пользователей - по все тем же признакам: количество регистраций с одного IP (в течение периода времени), с одним email, с одного браузера (индентифицируемого все тем же cookie - uid и т.п.) и т.п.
Необходима некоторая «сила» каждого пользователя, и её нижний предел. Если пользователь плюсует/минусует топик, вес его голоса равен силе. Пусть пользователь может плюсовать топик, если у него сила больше X. Нужно составить такой алгоритм расчёта силы, чтобы для любого натурального N трудозатраты на получение NX силы на одном аккаунте были не больше трудозатрат на получение X силы на N аккаунтах.
Что касается голосований за топик - к примеру, на Хабре он всегда инкрементируется на единицу, независимо от кармы, так что вес тут, как я понял, не имеет значения.
Алгоритм расчета силы в этих условиях не оставляет много места для воображения. Критерий ее оценки - активность пользователя, то бишь количество топиков/комментов. И тут имеет место быть как раз накопление виртуальной маны. Накопил определенное количество - можешь голосовать. А дальше уже ориентироваться на аналог кармы.
Не, не все так просто :) Если считать просто количество топиков/комментов - то пользователи будут флудить ради силы. Надо считать количество топиков/комментов, заплюсованных другими пользователями (и вычитать - количество минусованных). Тогда общество будет саморегулируемым - главное, подобрать коэффициенты ;)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории