[решено] сессии php и скачивание файлов (одно другому - нужно, чтобы мешало)

Модератор: Модераторы разделов

dergachev
Сообщения: 847
ОС: archlinux

[решено] сессии php и скачивание файлов

Сообщение dergachev »

Совсем детский вопросик. Вот есть у меня страничка с кучей ссылок на файлы, реально лежащие в доступной подпапочке. Доступ к страничке - только через логин/пароль/session_start, иначе выбрасываем на login.php

Но. Если уже один раз тут был, то файлики можно скачать без всякого пароля, напрямую по старой ссылке. Как запретить это?
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: [решено] сессии php и скачивание файлов

Сообщение dergachev »

То есть еще раз. Есть папка /data/ с кучей файлов и файлик index.php со ссылками на эти файлы примерно такого вида:

Код: Выделить всё

<?php
  session_start();
  if(!isset($_SESSION['logged_user'])){
    header("Location: login.php");
    exit;
  }
?>
<a href="/data/файлег1">сцылко1</a>
<a href="/data/файлег2">сцылко2</a>
Ну и любой юзер может обратиться по адресу http://я/data/файлег1 и всё скачать, и никакие сессии его не пропалят. Как в таких случаях исправляют ситуацию?
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [решено] сессии php и скачивание файлов

Сообщение NickLion »

Как вариант: папку data поместить куда подальше (чтоб веб-сервер напрямую не давал скачивать эти файлы, например выше корня). А скачивание сделать через отдельный скрипт, который будет читать файл и выдавать его как данные. Выглядеть это будет как: download.php?file=файлег1. Для пользователя. А этот download.php пусть проверяет всё, что надо.

PS единственно для докачки, придётся немного помудрить... хотя должны быть уже готовые аналогичные скрипты.
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: [решено] сессии php и скачивание файлов

Сообщение dergachev »

Во, нашел http_send_file - это оно, да? (побежал пробовать)
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: [решено] сессии php и скачивание файлов

Сообщение dergachev »

Хорошо, собрал pecl-http, работает, только надо еще ведь http_send_content_type говорить правильно, а то он у меня картинку в браузере показывает как крокозябры :huh: Как его правильно задать? (по прямой ссылке всё корректно работает).

(ну я, сидя на gentoo, стараюсь юзать очень минимальный apache, всего два модуля собрал - authz_host и dir :blush: )
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: [решено] сессии php и скачивание файлов

Сообщение dergachev »

Ладно, вот так меня устраивает.

Код: Выделить всё

http_send_content_disposition($_GET['file'], true);
http_send_content_type("application/x-octetstream");
http_send_file("папко".$_GET['file']);
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [решено] сессии php и скачивание файлов

Сообщение NickLion »

Код: Выделить всё

http_send_content_type("application/x-octetstream");

для картинки

Код: Выделить всё

http_send_content_type("image/jpeg");
http_send_content_type("image/png");
http_send_content_type("image/gif");
и т.п.
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: [решено] сессии php и скачивание файлов

Сообщение dergachev »

Ну вопрос-то был, как угадывать, картинка у нас или что.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [решено] сессии php и скачивание файлов

Сообщение NickLion »

dergachev писал(а):
28.01.2010 12:10
Ну вопрос-то был, как угадывать, картинка у нас или что.

1) плохой: по расширению (хэш-таблицу замутить... ассоциативный массив)
2) хороший: по сигнатуре (аналогично можно постараться, но сигнатуры могут разные длины иметь...)
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: [решено] сессии php и скачивание файлов

Сообщение Portnov »

А что, в php (или на чём вы пишете?) нет стандартных функций/библиотек для определения mime-type?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [решено] сессии php и скачивание файлов

Сообщение NickLion »

Portnov писал(а):
28.01.2010 16:10
А что, в php (или на чём вы пишете?) нет стандартных функций/библиотек для определения mime-type?

Кстати, да. Если верить гуглу: http://www.php.net/manual/en/function.finfo-file.php
Спасибо сказали: