|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serg Chervjakov 2:5020/400 07 Jul 2003 01:20:38 To : Vitaly Cheprasov Subject : флуд -------------------------------------------------------------------------------- Mon Jul 07 2003 00:26, Vitaly Cheprasov wrote to All: VC> как сфоргаHить защиту от флуда в чате???? Если я не ошибаюсь, флуд - это ведь когда одно и то же сообщение отправляется дважды в короткий промежуток времени? (напр. два раза нажал на кнопку отправить) Hу так из этого и исходи. Ты перед тем как спрашивать сам подумал, я надеюсь? Составь сначала алгоритм: " 1) у каждого юзера есть свои идентификатор. Hу если в чате нужна регистрация, то этот идентификатор - логин или ID номер. который присваивается во время регистрации. Если без регистрации, значит - это IP. 2) юзер "ИдЕнТиФиКаТоР" шлет "СоОбЩеHиЕ". проверяем, какие сообщения этот юзер вообще отправлял и смотрим - небыло ли такого же. Как это делать: Первый вариант: отправленные сообщения скажем хранятся в базе данных, скажем в таблице пользователей, скажем в столбце "last_mes" через разделитель ";razd;" - но надо хранить лишь скажем последние 20 мессаг. Достаешь их, делаешь split и grep или как-то по-другому - это думай сам. Второй вариант: делаешь доп. таблицу (Messages) - туда записываешь все отправляемые всеми юзерами мессаги. В одном столбце - мессага, второй столбец - идентификатор юзера, третий - время записи. Делаешь запрос, где просишь выдать записи, где текст сообщения - "СоОбЩеHиЕ", а идентификатор - "ИдЕнТиФиКаТоР" и время записи: больше time-15 (к примеру - если нужна пауза >15 сек). Если что-то найдено - шлем юзера подальше. Выход. Дальше буду писать лишь для второго варианта - ибо он наиболее красив и скорее всего в твоем чате есть такая или подобная таблица. 3) Добавляешь запись в таблицу Messages (СоОбЩеHиЕ, ИдЕнТиФиКаТоР, Время). Все. Это на случай, если чат на базе данных. Если нет (сообщения - в файле), то делаешь чуточку по-другому. Все-равно должен быть файл-аналог таблицы Messages, где хранятся сообщения (и выдаются всем посетителям чата). Тебе остается первой строчкой каждого сообщения указывать, кто и когда его отправил. А дальше юзать grep, возможно map (странно, но с последним я сам еще не работал:) ). Уж как ты будешь это делать - твое дело - это излишне долго рассказывать, как я бы это сделал. А вообще - я думаю стоит самому подумать на эту тему. Может я тут немного все запутано написал, но основную идею отсуда выдрать можно. Эта задача слишком проста, что бы ее объяснять и она слишком мало относится к перлу, что бы можно было просто написать скрипт - ведь я не знаю, что у тебя за чат и как и что в нм ханится. --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/166794b5ac1d4.html, оценка из 5, голосов 10
|