[Web] Как лучше отдавать контент по одноразовым паролям?

uncle17

С text/html всё, вроде бы, просто. Ввел человек пароль - ему дали страницу и стерли пароль из базы.
А вот если нужно отдать файло? Ввел человек пароль, отдал ты ему нужный файл, пароль стер из базы. А человек начал качать его ре/флеш/каким-то-еще гетом. И решил на минуточку на паузу поставить. Вернулся, а ему - хрена, не знаем твоего пароля. Человек в замешательстве.
Как быть?

pitrik2

Вернулся
через сколько?
а если он через три дня вернется, а через 3 месяца, а через 3 года?

uncle17

это понятно. Один из способов - время жизни пароля с момента нажатия сабмита. А без этого никак?

pitrik2

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

uncle17

ну это, собственно, то же самое...
Видимо, так и придется людям писать, что пароль действителен сутки

Helga87

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

uncle17

да это-то тут причем...

vall

ну что, берёшь урл, лимит работы, ойпи если надо, подписываешь эту херь РСА и отдаёшь пользоватетелю вводить в поле пароля =)

oranzh2009

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

Helga87

вместо копирования можно поставить hard link, что очень, очень экономично
выносить задачу раздачи с уровня статики в динамику может оказаться неэкономичным с точки зрения процессорного времени. У того же IIS раздача статических файлов идет на уровне ядра.

slonishka

давно, кстати?

Helga87

Как минимум, начиная с 6-го, есть кое-что: клац
Даже, наверное, лучше бац:
http.sys listens for incoming HTTP requests and passes them on to the appropriate routine. Because it runs in kernel mode rather than user mode, http.sys interacts with the operating system at a lower and much faster level.
в случае статических страниц, насколько я знаю, из уровня ядра http.sys и не будет выходить

slonishka

прикольно, спасибо =)
зы. ну да, я про http.sys слышал, мне просто интересен был ~ год, когда оно появилось.

kruzer25

вместо копирования можно поставить hard link, что очень, очень экономично
Это очень, очень хуёвое решение, хардлинки нужны совсем не для этого.
Ты не должен на уровне пользовательского приложения знать о хардлинке.

ppplva

Это очень, очень странное мнение. Откуда ты его взял ?

Helga87

если делаем хард-линки — упрощаем логику приложения и нагрузку на винчестер. Это плюсы.
ты вот говоришь, что это плохо. Почему? Что становится от этого решения хуже?

myrka68

Почему? Что становится от этого решения хуже?
может это тяжело сделать на пыхпыхе =)

kruzer25

Ага, а ещё можно всё написать на ассемблере, да ещё и заюзать SSE4 - и всё вообще будет очень быстро.

slonishka

тебя к ассемблеру форумчане не подпустят. %

Chupa

этому как раз не жалко
будет как в анекдоте про ржевского, который молодёжь онанизму обучил

slonishka

На балу юный Николенька Ростов всем мешает, шалит. Ржевский отозвал его на пару минут, и Николеньки как след простыл. Дама спрашивает Ржевского : "Поручик, как Вам это удалось?" "Пустяки-с , мадам, онанизму обучил..."
:?
имхо, ни фига не поможет.
его просто многие перестанут понимать, как контру.

Chupa

ну я надеюсь, что реагировать на непонятное тоже станут меньше :)

pitrik2

вместо копирования можно поставить hard link, что очень, очень экономично
выносить задачу раздачи с уровня статики в динамику может оказаться неэкономичным с точки зрения процессорного времени. У того же IIS раздача статических файлов идет на уровне ядра.
у меня в парагоне симлинки делались
там сусе и апач

bleyman

Кстати, а что с контрой? Мне его нехватает!

slonishka

мне тоже. :(
был тред недавно, но там ничего по теме.

Werdna

тебя к ассемблеру форумчане не подпустят. %
Форумчане Пенартура уже допустили до аццкой травы, так что ассемблер уже ему не нужен.

Helga87

у меня в парагоне симлинки делались
там сусе и апач
тоже можно. Я про хардлинки сказал, имея в виду windows+ntfs+IIS. В винде он по ярлыкам не ходит.

Fragaria

вместо копирования можно поставить hard link, что очень, очень экономично
Вместо копирования можно ваще-то юзать mod_rewrite, что логичнее.

Helga87

угу
но не всегда удобно. Т.к. если у нас по динамическому урлу заходят, mod_rewrite будет вынужден в базу залезть, чтобы узнать настоящий путь файла. А если юзать hard link, дергать базу не надо.

Fragaria

не обязательно, в путь до файла можно загнать всю необходимую инфу, типа хеша айпи, даты действия и ID нужного файла.

Helga87

да можно, можно. На gzgate я так и делал. Только, подумав хорошо, я не вижу смысла писать код, который будет по урлу восстанавливать путь, если этот код можно не писать.

Fragaria

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

Helga87

Почему?
Складываем все временные файлы в папку users/username. Раз в день запускается cron, который прибивает все hard links с датой создания больше суток (или сколько там хочется давать скачивать).
Ну, а прибить все совсем просто, как ты понимаешь.

kruzer25

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

Helga87

согласен, был неправ.
Поэтому кладем в users\yyyymmdd\username.
Оставить комментарий
Имя или ник:
Комментарий: