Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: уникальные ссылки
 
 автор: dod   (10.04.2008 в 16:01)   письмо автору
 
 

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

   
 
 автор: mechanic   (10.04.2008 в 16:15)   письмо автору
 
   для: dod   (10.04.2008 в 16:01)
 

мало че понятно,но может помочь обработка через ошибку 404
в 404.php будет лежать логика

   
 
 автор: dod   (10.04.2008 в 21:08)   письмо автору
 
   для: mechanic   (10.04.2008 в 16:15)
 

Нет , вы непоняли . я пытаюсь защитить контент от несанкционированого скачивания , путем переименовывания папки с файлом на случайно сгенерированый хеш , но пользователь - ж неодин может запросить файл , да и время "жизни" ссылки мне нужно ограничить 1 сутками .
путанина может получится .
подскажите как реализовать такую фунцию ?

   
 
 автор: Max Vasin   (10.04.2008 в 21:53)   письмо автору
 
   для: dod   (10.04.2008 в 21:08)
 

мне вот, честно, интересно как поисковики будут индексировать страницы?
тем не менее предложу свой вариант.
Предположим у нас три файла (1.rar, 2.rar, 3.rar). Если к примеру передавать id={1...10} - то будет доступен такой-то файл(1.rar), id={11...20} - то будет доступен такой-то файл(2.rar), ну и так далее.
Поэтому получается ставится каждому файлу в соответсвие некий интервал.
Думаю идея понятна))

----
Regards, Max Vasin.

   
 
 автор: dod   (11.04.2008 в 00:06)   письмо автору
 
   для: Max Vasin   (10.04.2008 в 21:53)
 

Ваш пример хорош , но он не позволяет защитить контент , от передачи ссылки другому пользователю ! потому-что это-т файл будет доступен по указаной ссылке !

   
 
 автор: Antohins   (11.04.2008 в 00:30)   письмо автору
 
   для: dod   (10.04.2008 в 16:01)
 

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

ид __реальный+путь+к+файлу__хеш__юзер+которому+дали+файл__время+"дачи"+файла

при "даче" файла записываем в бд всю инфу.

После этого юзер может свободно скачивать этот файл указанное вами время.

При заходе на наш скрипт вида file.php?hash=ggaf7678adfusdfysiudf берем строку из бд с данным хешом(если такой нет - выводим собалезнования), сравниваем юзера с тем кто записан в бд и в случае удачи делаем редирект на на "реальный путь к файлу" который дан в бд, в случае не удачи прощаемся с юзером и взрываем ему монитор.

В это время на кроне("cron (crontab)" - планировщик, который выполняет тот или иной скрипт с заданными параметрами заданное время. хостер должен предоставлять такую услугу) висит скрипт, который удаляет просроченные линки из той таблицы, допустим каждые 5 минут.

вот..

   
 
 автор: dod   (11.04.2008 в 05:19)   письмо автору
 
   для: Antohins   (11.04.2008 в 00:30)
 

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

   
 
 автор: Antohins   (11.04.2008 в 07:20)   письмо автору
 
   для: dod   (11.04.2008 в 05:19)
 

хз если честно. мб у муйскл есть какая нибудь стандартная фукнция удаления записи по истечении времени... ищите в поисковиках, спрашивайте у людей...

   
 
 автор: Diplex   (11.04.2008 в 08:19)   письмо автору
 
   для: dod   (11.04.2008 в 05:19)
 

Если крон будет запускать страницу раз в 5 минут, то ничего серверу не будет. Эффект такой, что просто как-будто к вам заходит человек 1 раз в пять минут, а это очень мало для того, чтобы повесить сервер :) Темболее затраты процессора на работу самого крона минимальны, почти не ощутимы.
Автоматического обновления бд, чтобы удалять записи нет. Можно сделать только так: в начале основного скрипта поместить запрос к бд, который будет удалять записи, которые просрочены.
Я не хотел мучиться с кроном, и сделал второй вариант - работает логично. Тоесть он срабатывает, когда человек обновляет страницу сайта, что не даёт ему скачать что-то после даного ему положенного срока, т.к. при выдачи ему страницы, сначала проверяется бд на старые линки и елси они есть, то всё удаляется, и только после этого выдаётся уже нужный контент.

   
 
 автор: Antohins   (11.04.2008 в 08:27)   письмо автору
 
   для: Diplex   (11.04.2008 в 08:19)
 

Тогда уж проще пользоваться кроном. Вот представьте что на сайте 500,000 уникальных пользователей и перед закачкой каждого файла будет идти проверка на просроченность.
Я бы поставил на крон и запускал бы каждые 3-4 мин. Ничего страшного если юзер попадет в эти 3-4 минуты и времени скачать файл у него будет чуток больше.
вот...

   
 
 автор: Diplex   (11.04.2008 в 08:35)   письмо автору
 
   для: Antohins   (11.04.2008 в 08:27)
 

Безусловно, с большой посещаемостью крон спасение. Но когда проект рассчитан на 1000 человек, нет смысла запускать крон, проще одну строчку кода в верхушку скрипта кинуть. А вообще, крон - нужная штука :)

   
 
 автор: Antohins   (11.04.2008 в 09:08)   письмо автору
 
   для: Diplex   (11.04.2008 в 08:35)
 

Я бы и при 1000 юзерах поставил на крон, кто знает как быстро твой проект наберет популярность, а потом влом будет все переделывать. при 1000 можно и каждую минуту скрипт запускать)

   
 
 автор: Diplex   (11.04.2008 в 09:25)   письмо автору
 
   для: Antohins   (11.04.2008 в 09:08)
 

Ну если проект начнёт развиваться, то на порах радости можно будет и крон поставить :))

   
 
 автор: dod   (11.04.2008 в 09:25)   письмо автору
 
   для: Antohins   (11.04.2008 в 08:27)
 

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

   
 
 автор: vitali   (11.04.2008 в 09:53)   письмо автору
 
   для: dod   (11.04.2008 в 09:25)
 

Несколько уточняющих вопросов по постановке задачи:
1) Ваши пользователи авторизируются при входе?
2) Установлен ли лимит времени на доступность к файлу для каждого пользователя или он един для всех?
При ответах на вопросы:
1) да, тогда в таблице базы либо (в файле) "статистике посещений" для каждого пользователя фиксируйте время "первого доступа" и играйтесть в лимиты времени (дам - не дам).
При этом ответ на 2) вопрос - это разновидность логики. Динамически (по входу) добавляйте, модифицируйте строки в "статистике посещений", сразу же можно и чистить явно "старые" строки. Про CRON забудьте - метод "слепой секритарши переодически прощупывающей ящики входной корреспонденции", - ДУРНАЯ ПРАКТИКА. CRON-ы не для этих целей.

Сложнее если пользователи не авторизуются, то здесь проблема аутентификации (IP м. б. динамическим, КУКИ подделываются, СЕССИИ не проходят).

   
 
 автор: GeorgeIV   (11.04.2008 в 10:12)   письмо автору
 
   для: vitali   (11.04.2008 в 09:53)
 

Я делаю так, что сами файлы с контентом лежат в папке, недоступной извне. А юзеру формирую для скачивания файл с левым путем и вставляю в это файл контент динамически.

   header("Content-type: application/octet-stream");
   header("Content-Disposition: inline; filename=tovar.rar");
   readfile($spath."/".$pfile."/$fout");


Комментарий: зарегенный пользователь запрашивает какой то файл, я ему отдаю файл, который всегда называется "tovar.rar",
путь $path/$pfile/ задан в конфигураторе и извне недоступен.

Т.е. у меня юзер вседа видит путь /out.php/имя_файла, а получает то, что я ему определю. Незарегенный юзер до этого места не доходит.
Это упрощенно в двух словах.

   
 
 автор: dod   (11.04.2008 в 12:41)   письмо автору
 
   для: GeorgeIV   (11.04.2008 в 10:12)
 

Идея у вас GeorgeIV - пойдет но недостаток в вашем методе довольно существенный , а именно ограничение в скорости закачки обозначеная возможностями загрузки браузера .

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования