Предоставить доступ к изображению в течение ограниченного времени, пока администратор не удалит право доступа? - PullRequest
0 голосов
/ 30 сентября 2011

Я хочу, чтобы люди имели доступ к изображениям в течение ограниченного периода времени.Например, они платят за x.jpg и имеют доступ к нему, пока я не решу, что у него больше нет доступа для его загрузки.

примечание: сервер 'images', хранящий x.jpg, не зависит от 'www'сервер, так что система может легко масштабироваться.(Два сервера не обмениваются данными, доступ к БД или около того ...)

Лучшее решение, которое я нашел на данный момент, это:

На сервере www я создаю зашифрованныйСтрока, содержащая два параметра: «имя файла» и «expiration_stmp».Я передаю эту зашифрованную строку в сценарий на сервере изображений, который ее расшифровывает, проверяю, не истек ли срок действия stmp, и если все в порядке, считываю файл на диске, выводю правильные заголовки и выводю двоичные данные изображения наclient.

Итак, у меня есть такая ссылка на сервере www: "img src = http://IMAGES.myserver.com/get.php?XJDKUJHKDJSHJKDHJKHJKDJKDJKD", где" XJDKUJHKDJSHJKDHJKHJKDJKDJKD "при расшифровке извлечет в имя файла = x.jpg, expiration_stmp = 132920302030 и получит php.на сервере изображений будет что-то вроде заголовка ('Content-type ... bblablabl'); readfile (x.jpg) .....

Проблема, которую я должен решить, состоит в том, что в данный моментЯ генерирую зашифрованную строку XJDKUJHKDJSHJKDHJKHJKDJKDJKD, я не могу знать expiration_stmp, потому что право доступа может быть удалено администратором в любое время, в будущем, от 1 минуты до 5 дней. Поэтому, когда администратор в панели администратора удаляет право на чтение файладля этого конкретного пользователя пользователю должно быть отказано в доступе к файлу.

Чтобы справиться с этим, я подумалрегенерации страницы, содержащей ссылки каждый час, путем принудительного обновления страницы для генерации новой зашифрованной строки, содержащей новые expiration_stmps, действительные максимум 1 час.Так что ссылки "img src = http://images.myserver.com/get.php?XJDKUJHKDJSHJKDHJKHJKDJKDJKD" будут действительны только в течение 1 часа. Поэтому, когда администратор отменяет право доступа пользователя, я просто отказываюсь восстановить новую зашифрованную строку, чтобы пользователь больше не мог получить доступ к файлу послесрок действия последнего сгенерированного expiration_stmp истек (максимум 1 час).

На данный момент это лучшее решение, которое я нашел .... Мне бы хотелось услышать какие-либо мысли или лучший способ справиться с такой ситуацией?

спасибо

Ответы [ 2 ]

0 голосов
/ 30 сентября 2011

Лучшим решением будет использование базы данных в следующем конструкторе:

  • Создайте базу данных с 2 таблицами (вы можете добавить больше, если вам нужно), токен, изображение.

token: токен будет иметь поле для userID, которое будет указывать на другую таблицу для хранения информации о пользователе, ID изображения, которое будет ссылаться на изображение в базе данных изображений, а также дату истечения срока действия и ID.

image: для ссылки на скачивание у него будет ID, имя_изображения

, вы можете просто сделать: download.php? tokenID = xxx, и скрипт запустится и проверит, истек ли срок годности или нет,это произойдет в режиме реального времени, когда пользователь нажимает на файл, чтобы у вас не было проблемы несанкционированного доступа.как только срок действия проверен, вы можете получить imageID из поля токена и найти изображение на другом сервере.

Вы можете легко масштабировать эту структуру, имея один или несколько серверов баз данных (на мой взгляд, этого должно быть достаточно)) и подключить все серверы файлов / сценариев к удаленному серверу баз данных.

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

0 голосов
/ 30 сентября 2011

Почему у вас сложилось впечатление, что ограничение по пользователю или сеансу не масштабируется. Возможно, вы могли бы сгенерировать код доступа вместо вашей зашифрованной строки. Сохраните код доступа в БД, связанный с изображением, которое вы должны обслуживать, а также идентификатор пользователя. Если администратор хочет удалить доступ, просто удалите запись или отметьте ее как просроченную. Базы данных очень быстрые, и нет причин, по которым база данных с надлежащими индексами не сможет справиться с этим, даже если масштабируется до миллионов активных изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...