PHP

Множественный клик по ссылке на низком интернет соединении. Реакция сервера?

Если при низком качестве интернета кликать много раз по ссылке на сервер начинают отправляться запросы. Как на это реагирует сервер? Насколько это проблемно, стоит ли с этим что-то делать например по первому клику ставить disable с задержкой на кнопку?
никак не реагирует. Половина этих запросов до него даже не поступят!
Игорь Tокарев
Игорь Tокарев
61 987
Лучший ответ
Сервер каждый запрос получает и обрабатывает независимо от всех прочих запросов. Так что он выполнит действия много раз.

Если это запрос на получение данных браузером (в том числе и переход по ссылке) - проблем не возникает и ничего блокировать не требуется.

Но если это передача данных на сервер - где эти данные пишутся в базу данных - надо принимать меры. Да, блокировать кнопку. Но не на определенное время, а до получения ответа от сервера. Для чего передавать данные AJAX'ом.
Это точно
@M
@leg Meleshenko
37 569
Многие ставят disable, но это не во всех случаях спасает. Конечно стоит проводить проверку мутабельности данных, если они каким-то образом обрабатываются после поступления на сервер. Кто-то отправляет AJAX запрос и ждет ответа от сервера, но при низкой скорости в сети пользователь может устать :) кто-то ставит уникальные токены и проверяет при записи в базу есть такой токен или нет, или придумывает свои решения... Но проблема может случиться и этот момент стоит учитывать в разработке.
Нет. Если ты говоришь про ссылку в html, напрмер
 Перейти на главную 
, то твой браузер просто запомнит, что надо перейти по ссылке. Сервер этого даже не заметит.

Есть и другие варианты, например:
 Внести данные в базу 
то в таком случае, количество внесений в базу ограничено количеством загрузок страницы. Даже при медленном интернете браузер по идее откроет ссылку только один раз.

Другой разговор будет, если у тебя ссылка ведёт на php-файл, который вносит данные в датабазу и выходит обратно (после внесения создаёт редирект на предыдущую страницу).
 Внести данные в базу 
притом файл add.php содержит в себе
  
, то в таком случае, да. Может быть так что страница загрузится несколько раз.

Решать всякими AJAX - бессмысленно. Надо просто сделать чтобы php проверял, не были ли такие же данные занесены до этого.
Amrullo Vahobov
Amrullo Vahobov
457
Алексей Силинский Как ты проверишь наличие записанных данных при втором вызове, если транзакция в первом вызове ещё не закрыта?

А на любой костыль - вроде хранения флага "данные обрабатываются" в сессии - можно привести несколько сценариев, когда это не решает проблему, а лишь создаёт новые проблемы.

Единственная точка, в которой гарантированно известно, что данные отправлены - это браузерный JS-код, отправляющий данные.