Возникла проблема - не давать скачивать файлы для незарегистрированных пользователей на одном из сайтов.
1. Неужели на одном сайте при существовании двух index.php в разных директориях сессия не может оставаться одной и той же (натурально воспринимается как 2 сайта, сессия уничтожается...)
2. Забили на сессию, делали через БД... написали .htaccess такой, что любой запрос файла перенаправляется на index.php?file=запрошенный_файл.... Наблюдали как лихо страница обновляется 1000 раз, находя по маске в адресе опять тот же (.*)$ и перенаправляя ещё дальше
3. Третий вариант кое как заработал.... вопрос - как отдать файл клиенту? т.е. запросили картинку - попали на обабатывающий файл - тобы в случае успешных проверок файл выдал именно файл? что-то типа include(запрошенный файл) (p/s/ инклуд очень красиво выводит файл как текст, наверняка есть способ? Как всем известные файловые серверы делают?)
P/S/ не стали мудрить, тупо запретили прямые ссылки на файлы, но ответы на вопросы пока не узнаю, не засну) Заранее спаибо)
1. Неужели на одном сайте при существовании двух index.php в разных директориях сессия не может оставаться одной и той же (натурально воспринимается как 2 сайта, сессия уничтожается...)
2. Забили на сессию, делали через БД... написали .htaccess такой, что любой запрос файла перенаправляется на index.php?file=запрошенный_файл.... Наблюдали как лихо страница обновляется 1000 раз, находя по маске в адресе опять тот же (.*)$ и перенаправляя ещё дальше
3. Третий вариант кое как заработал.... вопрос - как отдать файл клиенту? т.е. запросили картинку - попали на обабатывающий файл - тобы в случае успешных проверок файл выдал именно файл? что-то типа include(запрошенный файл) (p/s/ инклуд очень красиво выводит файл как текст, наверняка есть способ? Как всем известные файловые серверы делают?)
P/S/ не стали мудрить, тупо запретили прямые ссылки на файлы, но ответы на вопросы пока не узнаю, не засну) Заранее спаибо)
2. Ест-но оно будет совпадать и с новым адресом. Просто перепиши рег. выражение так, чтобы оно не совпадало с URL имеющихся файлов на сервере.
3.
header("Content-Type: application/octet-stream"); // чтобы не выводилось текстом
readfile($filepath); // выводим файл
Проверяю так - var_dump($_SESSION) на самом сайте - всё норм, при var_dump($_SESSION) вызываемый из файла в другой директории (причем переход по ссылке туда) возвращает NULL , причем сессию даже регенерировать пытался.. буду копаться с настройками
L.P.M. lugavchik
Огромное спасибо)
Для начала рассмотрим, чем плох хотлинкинг. Например, некий сайт размещает у себя изображение, находящееся на Вашем сайте, просто указав его в тэге
Как же бороться с подобной практикой?
Рассмотрим следующий пример части файла .htaccess:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC] RewriteRule \.(js|css)$ - [F]
Данный код запрещает обращения к .js и .css файлам (скрипты Javasсript и описания Cascading Style Sheets), если они производятся не с Вашего сайта.
Другой пример:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC] RewriteRule \.(png|gif|jpg|jpeg)$ www.mydomain.com/youaretheworst.gif [R,L]
При обращении извне к изображениям, хранящимся на вашем сайте, вместо самих изображений будет отображаться содержимое файла youaretheworst.gif.
session_start()-то не забыл? *) а то у меня так бывает)
а поставь Оперу, зайди через нее на сайт, а потом в Preferences > Advanced > coоkies > Manage coоkies, найди нужную куку и посмотри, куда она поставилась.
настройками session_start()-то не забыл? *) а то у меня так бывает)
нет конечно, в обоих скриптах стояло...
Preferences > Advanced > coоkies > Manage coоkies,
вау) вот чего мне всегда не хватало! спасиб)
Вот пример Миме:
image/jpeg
image/gif
image/png
это картинки и т.д.
Осет аппликатион заставит скачивать фай как бинарный документ.
1) узнайте миме тип файла
header('content-type:'.$mime);
echo($file_content);
exit(); //!!!!!
Для узнавания миме типа есть функция, не знаю какая правда, ибо пользуюсь своей личной. Поищите в доках.
спасиб, так и сделаю)
Вот тут нашлась функция для определения mime-type, но написано, что она deprecated...
Осет аппликатион заставит скачивать фай как бинарный документ.
Нет, application/octet-stream означает, что веб-сервер "не узнал" mimetype документа и предлагает распознать его клиенту самостоятельно.
А для скачивания можно попробовать application/x-msdownload, хотя доки говорят, что под этим должны подразумеваться исполнительные файлы)
Кстати, для картинок еще можно использовать getimagesize() - там в возвращаемом массиве есть и mime-type.
php.su/articles/?cat=examples&page=018
php.su/forum/topic.php?forum=35&topic=11
webmastak.com/article.aspx?id=322
Там по поводу докачки сказано =)