Intereting Posts
Как закрыть закрытые HTML-теги? Есть ли способ изменить права доступа к папкам с PHP без использования FTP? Отображение категории n-го уровня в php Разведывать строку, кроме окружения круглыми скобками? Автоматическое обновление DIV через 10 минут PHP, htaccess: применить заголовок страницы в URL-адресе Имея отдельные функции php для отдельных значений опций html mcrypt encrypt добавляет s-связку '% 00' до конца строки PHP: Что делать, если я старую статический метод нестационарно Как работает это гигантское регулярное выражение? Как получить идентификатор родительского продукта в пурпуре? Facebook getAccessToken () возвращает токен доступа к приложениям: работает отлично на одном сервере, но бросает токен доступа к приложениям в другом. Динамически изменять значения ассоциативного массива в php Как получить пользовательский атрибут html в php POST? Как реализовать функцию: отправить сообщение на форум по электронной почте?

Однажды загрузка liks в php?

Я пытаюсь создать одноразовую ссылку для скачивания в php, так как мой клиент хотел бы продать билеты на поездку на своем веб-сайте. Я начинаю / никогда не писал свой собственный php, и я пытаюсь создать одноразовую ссылку для скачивания билетов. Проблема в том, что ваучеры ae создаются динамически с помощью php, а переменная сохраняется в ссылке, иначе я мог бы просто использовать встроенную функцию моих cms. Тем не менее, я хочу создать одноразовую ссылку на страницу, перенаправляющую людей на страницу с помощью перенаправления.

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

Спасибо, Томас

Solutions Collecting From Web of "Однажды загрузка liks в php?"

Схема похожа:

  • Создать уникальный идентификатор – uniqid можно использовать
  • Вставьте это в свою базу данных
  • Отправьте ссылку на пользователя, который каким-то образом использует этот идентификатор, например / download / {id}
  • Когда пользователь переходит к ссылке, зарегистрируйте в своей базе данных, что она была использована

И затем убедитесь, что ваш скрипт загрузки проверяет, использовался ли ранее этот идентификатор.

Вам нужно будет сохранить какой-то идентификатор в базе данных и удалить его после его доступа. Таким образом, это будет работать следующим образом:

  • Человек покупает продукт, и ваш скрипт создает новую таблицу в базе данных
  • Пользователь загружает продукты, и ваш скрипт удаляет строку

Не зная вашей среды подробно, вот идея процесса, как правило, с некоторыми примерами идей для уровня данных.

Структура вашей таблицы для ваших билетов должна выглядеть примерно так:

  • id – Основной ключ
  • transaction_id. Должен быть числовой идентификатор в другой таблице, где вы можете хранить информацию о транзакции для покупки, к которой может быть присоединен другой запрос
  • uniq_key. Это может быть строка для URL-адреса для восстановления билета, построенная с использованием uniqid или хеширования чего-то с md5 . Есть много хороших подходов, которые вы можете найти в SO для генерации GUID.
  • used – Булево значение, если билет был загружен или нет. Когда вы приобретете, по умолчанию будет установлено значение 0 (false) и будет обновлено до 1 (true) после загрузки.
  • timestamp – отметка времени, которую вы можете установить для обновления при поиске

Для такого приложения некоторые разработчики скорее просто удалили бы строку, чем эту логическую, но это зависит от того, является ли архивирование этих данных релевантным или нет для вашей бизнес-логики. Как правило, вы можете выходить на борт безопасности и хранить данные, а просто делать недействительными, это будет bool.

При покупке вы можете вставлять в свои транзакции и таблицы билета, создавать новые строки для данных покупателя и в то же время вставлять новый билет. Вам также нужно будет настроить способ получения билета, используя маршрутизацию URL с $_GET файлом $_GET который отправляется по электронной почте или каким-то таким образом.

Конечная точка, на которую выводится загрузка для билета, должна сначала запросить уникальный идентификатор, где логическое значение false, и возвращается строка, разрешить загрузку, а затем запустить другой запрос UPDATE, который затем устанавливает используемое значение boolean в true , Если строки не возвращаются (неверный идентификатор или билет уже был получен), загрузка будет отказана.

Вы можете выводить загрузки прямо в браузер с помощью функции header() для установки типа mimetype и заголовка Content-Disposition. В идеале вся эта логика может находиться в одной конечной точке вывода.

Если вы еще не используете какую-либо фреймворк, я бы предложил изучить что-то, чтобы хотя бы настроить маршрутизацию URL-адресов для вас, чтобы сделать жизнь намного проще. Kohana, CodeIgniter и CakePHP хорошо подходят для этой проблемной области.

Также рассмотрите потребности бизнес-логики – действительно ли нужно только разрешить одну загрузку? Если у билетов есть уникальный идентификатор, такой как серийный номер или uniqid() , действительно ли необходимо ограничить скачивание, например, когда билеты могут быть подтверждены при погашении? Я не знаю ваших требований, но я знаю, что был бы довольно PO'ed, если бы билетмейстер не разрешил мне загружать мой билет снова, если бы я забыл его в сцепке 🙂

Удачи.