Как защититься от мультизапросов (Charles)?

111
14 августа 2018, 23:20

Приведу пример: допустим, нужно сделать чат, в котором отправка одного сообщения платная и составляет 1 рубль (первое условие). Второе условие заключается в том, что пользователю нельзя отправлять подряд более двух сообщений.

То есть, алгоритм отправки сообщения состоит в следующем:

  1. Проверить, не отправил ли уже пользователь 2 сообщения, если отправил, выдать ошибку, иначе:
  2. Снять средства с баланса (1 рубль), если средств недостаточно, выдать ошибку, если же достаточно, то:
  3. Добавить сообщение в базу.

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

Данная ситуация лишь пример, и не стоит концентрироваться только на чате. Разберем пример с онлайн-рулеткой:

В одной комнате играет несколько пользователей (неважно количество). Лимит на сумму ставки -- от 10 до 50 рублей. Максимальное количество ставок за один раунд -- 5 ставок.

То есть, в данном примере также нужно сделать несколько проверок, чтобы потом добавить ставку в базу. Если ставка не успеет добавиться, а уже следующий запрос начнет выполняться, то в этом время проверка на количество ставок не будет пройдена корректно и лимит ставок может быть нарушен.

Подскажите, пожалуйста, что делать в этой ситуации?

READ ALSO
Получить данные из db.sqlite

Получить данные из db.sqlite

Пожалуйста, помогите получить данные по item_id из таблицы items

130
Laravel 5.6, встроенный bootstrap в public/css/app.css файле

Laravel 5.6, встроенный bootstrap в public/css/app.css файле

Я Bootstrap не устанавливал на Laravel, но когда подключаю файл из папки

154
Как создать подобие id vk? [дубликат]

Как создать подобие id vk? [дубликат]

На данный вопрос уже ответили:

138
Существует ли процесс (C++)

Существует ли процесс (C++)

Хотелось бы узнать, как можно реализовать проверку на существование процессов с определенными заголовками окон, если хоть у одного процесса...

165