Как я могу контролировать повторные представления Ajax 'post'? - PullRequest
0 голосов
/ 06 февраля 2009

Я не хочу останавливать пользователя от многократного нажатия на одну и ту же кнопку ajax, но я хочу использовать некоторый контроль, чтобы не допустить, чтобы кто-то повторно нажимал кнопку злонамеренно, что вызывало бы повторные запросы базы данных. Какой простой способ справиться с этим на jquery .post в asp.net mvc? Если я вставлю задержку, опытная сторона клиента будет разрушена (?)

Ответы [ 7 ]

6 голосов
/ 06 февраля 2009

Почему бы не отключить кнопку после нажатия, а затем повторно включить ее после получения ответа от сервера?

3 голосов
/ 06 февраля 2009

Это не проблема на стороне клиента и может быть решена только на стороне сервера. Если выполняется запрос AJAX, то злонамеренный пользователь может сделать запрос AJAX напрямую на ваш сервер напрямую через HTTP - это довольно тривиально даже для новичков, использующих что-то вроде WFtech или Curl .

Не для того, чтобы утверждать очевидное, но если пользователь может нажать кнопку несколько раз, то и противник тоже не может определить, кто есть кто. Вы можете сделать какое-то регулирование, чтобы ограничить его до x кликов в y секунд и т. Д., Но затем противник также может ограничить свой коэффициент кликов.

2 голосов
/ 06 февраля 2009

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

2 голосов
/ 06 февраля 2009

установить флаг в вашем javascript, указывающем на ожидающий запрос, после получения ответа снимите флажок.

Таким образом, пользователь может нажимать кнопку столько раз, сколько пожелает, будет только один «активный» запрос к серверу.

1 голос
/ 06 февраля 2009

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

Я слышал об этом на .Net Rocks # 367 с Уди Даханом

1 голос
/ 06 февраля 2009

Вы можете поместить кнопку в таймер, поэтому после нажатия она будет отключена на X секунд или до получения ответа от сервера.

1 голос
/ 06 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...