Как показать ссылку только 5 пользователям за раз?
Всем привет! Есть ссылки рекламы, которые видны всем пользователям.
Как сделать так, чтобы 1 такая ссылка показывалась не более 5 пользователям?
Например: Сейчас на сайте находятся 100 пользователей. В базе 50 рекламных ссылок, которые в рандомном виде показываются этим 100 пользователям. Если какую-то ссылку уже видят 5 пользователей, то эту ссылку больше не показываем другим пользователям, а выводим другую(если есть). А если кто-то закрывает страницу(т.е. больше не видит ссылку), то показываем эту ссылку 1 пользователю.
как вы идентифицируете пользователей? Что, если один откроет две вкладки с сайтом? Что, если одну нормальную, а вторую приватную - без кук? Что, если у пользователя AdBlock и он не загружает баннеры вообще?
Записать в скрипт счетчик который будет записывать в базу данных количество просмотров рекламы пользователями (определять пользователя по сессиям), в то же время скрипт проверяет количество показов и если накопилось > 5 то не показывает.
Можно сделать JS, который от каждого пользователя будет пинговать ваш сервер раз в N секунд, подтверждая, что пользователь всё ещё на сайте. Прекращение поступления пинга с id отображаемого у того пользователя баннера делает такой баннер вакантным для нового отображения.
На бэкенде в момент загрузки страницы определяется, какой из вакантных баннеров можно показать.
О таком варианте я тоже думал, но мне не очень это нравится, т.к. сайт установлен на виртуальном хостинге. И если пользователей будут не мало, то думаю хостинг "не обрадуется"
rinaz22, кроме подтверждения живого коннекта - пингом или, скажем, соединением websocket - иного надёжного способа, наверное, не существует, т.к. может, например, просто оборваться инернет у пользователя и никакой сигнал об уходе от него не пройдёт.
Другой вариант, наверное, просто предположить, что дольше 10 минут никто на сайте не зависнет, поэтому баннер можно считать свободным автоматически через 15 минут.
Наконец, пинговать можно редко: раз в 5 минут. Даже при 3 тыс. одновременных посетителей, 3000 пингов за 300 секунд это 10 пингов в секунду. Можно вынести распределение баннеров из БД в Redis, если позволяет хостинг.