Защита ASX-файла в PHP

У меня на сайте есть раздел только для членов, где пользователи могут войти и просматривать потоковое содержимое Windows Media.

Я создал скрипт PHP для обслуживания файла ASX, но не могу проверить это с помощью информации о сеансе. Я думаю, это потому, что WMP делает запрос, а не php-страницу.

Кто-нибудь может предложить элегантный способ защиты файлов ASX?

2 ответа

Решение

Я хотел бы включить идентификатор сеанса PHP в запрос.asx. Обычно этот идентификатор хранится в куки и передается в PHP при каждом запросе страницы. В этом случае WMP не отправляет файл cookie вместе, поэтому у вас нет возможности узнать, аутентифицирован ли запрос или нет.

Когда вы выводите ссылку на скачивание для файла ASX, добавьте идентификатор сеанса в качестве переменной GET:

$download_link = "http://myserver.com/download_asx_file.php?"
$download_link .= "f=$file_id&";
$download_link .= htmlspecialchars(SID);

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

Примечание. Константа SID оценивается как PHPSESSID=12345678 (или независимо от того, что происходит сессия этого пользователя)

Вы можете попробовать это:

//$user->isAuthenticated is only for ilustration, use whatever method you
//use to check if the user is authenticated
if($user->isAuthenticated()) {
      $asx = file_get_contents("/path/to/my/file.asx");
      header("Content-type: video/x-ms-asf");
      echo $asx;
} else {
      //Tell the user that he can't view this asx
}
Другие вопросы по тегам