Как я могу обнаружить и предупредить, что конкретный пользователь отправляет много сообщений подряд?


В чат, как я могу обнаружить и предупредить, что данный пользователь системы вы отправляете много сообщений подряд (flood)?

Author: UzumakiArtanis, 2013-12-17

1 answers

Предлагаю сохранить в сеансе дату, когда было отправлено сообщение, и счетчик сообщений. Если пользователю отправить еще одно сообщение, сравните дата, с который хранится в сеансе, если разница во времени будет короткой, увеличьте счетчик в сессии.

, Если этот счетчик добраться на порог (например, 3 сообщения) отказаться в ближайшие requests до определенного времени не прошло.

, Чтобы сохранить время последнего поста

$_SESSION["LastPost"] = time();

, Чтобы сравнить время post -

// se o post foi feito novamente nos últimos 10 segundos
if (isset($_SESSION["LastPost"])
    && $_SESSION["LastPost"] <= (time() - 10))
{
    if (!isset($_SESSION["PostCount"]))
        $_SESSION["PostCount"] = 0;

    $_SESSION["PostCount"] += 1;
}

, чтобы проверить, если пользователь достиг предела постов в секунду

if (isset($_SESSION["PostCount"]) && $_SESSION["PostCount"] == 3)
{
    // você pode setar uma trava
    $_SESSION["LockPost"] = time() + 60;
}

Если защелка существует ignore request.

if (isset($_SESSION["LockPost"]) && $_SESSION["LockPost"] >= time())
{
    // bloqueado, ignore
}
else if (isset($_SESSION["LockPost"]))
{
    // o tempo de bloqueio passou
    // zere todas as variáveis da sessão
    unset($_SESSION["LockPost"]);
    // ...
}
 7
Author: BrunoLM, 2014-01-17 01:32:11