В некоторых социальных играх на Facebook пользователь может опубликовать ссылку на свой фид: «Нажмите здесь, чтобы получить бонусные золотые монеты - только для первых 5 человек».
Как мы можем создать такую ссылку?
Ссылка не должна быть легко "сгенерирована" любыми людьми как способ обмана.
Кроме того, какие таблицы базы данных должны быть добавлены для обработки:
1) бонус может быть востребован до 5 раз
2) должны быть востребованы разными людьми
(каждый человек имеет уникальный числовой идентификатор на платформе социальной сети, такой как Facebook)
Обновление: я думал о том, чтобы получить следующий первичный идентификатор (целочисленный индекс) в таблице призов и md5 с каким-то секретным ключом, чтобы получить «код приза», и убедитесь, что его нет в таблице «PrizeClaimed» - если он уже существует, просто используйте следующий первичный идентификатор (добавив запись и пересчитав md5, пока не будет найден уникальный). Эта таблица PrizeClaim является таблицей соединений для pri_code и user_id, поэтому один приз может претендовать на несколько человек, а один человек может претендовать на несколько призов. Если, когда человек нажимает на ссылку, мы добавляем в таблицу запись priz_code и user_id - но только в том случае, если количество записей, полученных при совпадении кода выигрыша, равно 4 или меньше. Если уже 5, то просто сообщите «слишком поздно - востребовано всеми людьми». Интересно, как этот метод, есть ли лазейки, улучшения или другие способы его реализации?
(например, таблица призов - это просто таблица для получения идентификатора, и в ней больше ничего не хранится. Может быть, мы можем использовать текущую временную метку с микросекундами плюс случайное число для выполнения md5, и, если код_приза уже существует, повторите еще раз. В этом случае мы можем забыть о призовой таблице.)