Я пытаюсь создать одноразовую ссылку для скачивания в php, так как мой клиент хотел бы продать билеты на поездку на своем веб-сайте. Я начинаю / никогда не писал свой собственный php, и я пытаюсь создать одноразовую ссылку для скачивания билетов. Проблема в том, что ваучеры ae создаются динамически с помощью php, а переменная сохраняется в ссылке, иначе я мог бы просто использовать встроенную функцию моих cms. Тем не менее, я хочу создать одноразовую ссылку на страницу, перенаправляющую людей на страницу с помощью перенаправления.
Если кто-то может описать процесс создания одноразовых ссылок, которые будут сильно оценены, и если некоторые из них могут предоставить примерный код, который был бы замечательным.
Спасибо, Томас
Схема похожа:
И затем убедитесь, что ваш скрипт загрузки проверяет, использовался ли ранее этот идентификатор.
Вам нужно будет сохранить какой-то идентификатор в базе данных и удалить его после его доступа. Таким образом, это будет работать следующим образом:
Не зная вашей среды подробно, вот идея процесса, как правило, с некоторыми примерами идей для уровня данных.
Структура вашей таблицы для ваших билетов должна выглядеть примерно так:
uniqid
или хеширования чего-то с md5
. Есть много хороших подходов, которые вы можете найти в SO для генерации GUID. Для такого приложения некоторые разработчики скорее просто удалили бы строку, чем эту логическую, но это зависит от того, является ли архивирование этих данных релевантным или нет для вашей бизнес-логики. Как правило, вы можете выходить на борт безопасности и хранить данные, а просто делать недействительными, это будет bool.
При покупке вы можете вставлять в свои транзакции и таблицы билета, создавать новые строки для данных покупателя и в то же время вставлять новый билет. Вам также нужно будет настроить способ получения билета, используя маршрутизацию URL с $_GET
файлом $_GET
который отправляется по электронной почте или каким-то таким образом.
Конечная точка, на которую выводится загрузка для билета, должна сначала запросить уникальный идентификатор, где логическое значение false, и возвращается строка, разрешить загрузку, а затем запустить другой запрос UPDATE, который затем устанавливает используемое значение boolean в true , Если строки не возвращаются (неверный идентификатор или билет уже был получен), загрузка будет отказана.
Вы можете выводить загрузки прямо в браузер с помощью функции header()
для установки типа mimetype и заголовка Content-Disposition. В идеале вся эта логика может находиться в одной конечной точке вывода.
Если вы еще не используете какую-либо фреймворк, я бы предложил изучить что-то, чтобы хотя бы настроить маршрутизацию URL-адресов для вас, чтобы сделать жизнь намного проще. Kohana, CodeIgniter и CakePHP хорошо подходят для этой проблемной области.
Также рассмотрите потребности бизнес-логики – действительно ли нужно только разрешить одну загрузку? Если у билетов есть уникальный идентификатор, такой как серийный номер или uniqid()
, действительно ли необходимо ограничить скачивание, например, когда билеты могут быть подтверждены при погашении? Я не знаю ваших требований, но я знаю, что был бы довольно PO'ed, если бы билетмейстер не разрешил мне загружать мой билет снова, если бы я забыл его в сцепке 🙂
Удачи.