есть файл на сервере, надо скачать его через временную ссылку, которая действует для открывшего сайт браузера и будет действовать некоторое время - после чего, скачка станет недоступной
Только если когда ссылку формировать в нее запрятать время когда она создана, тип браузера и т.д И когда переходить по ней через страницу с расшифровщиком который обработает из ссылке данные, сравнит с текущими,сделает сверку по времени и или откажет или даст доступ. НО открытие страницы и удаление кода/редактирование сводит работу к нулю
например, такая ссылка - link.php?key=ZmlsZS5qcGd8MTMyNTgwODAwMA==&secret=0e0eb32628bc0ccef93eac5e954605e5 параметр key = это base64 от "filename|timestamp", secret - md5 от "filename|timestamp|secretkey" в скрипте расшифровываешь base64, смотришь, не прошел ли еще timestamp, а потом генерируешь сам secret - если он совпадает с пришедшим - значит ссылка настоящая, потому что secretkey знаешь только ты. в md5 можно кроме секретного ключа добавить IP, название браузера - тогда ссылку будет проблемно кому-либо передать
nyakamedia, идея хороша, такая очень подойдёт, даже можно и по ip не проверятью, зачем усложнать ) вот бы пример сатью прочитать как такое сделать, по примеру разберусь )
Функция шифрования ссылки PHP: function encode_link($url = false) { if ($url) { return base64_encode($url . "||" . time()); } else { echo "Нет ссылки для создания ссылки"; } } Использование PHP: echo encode_link("http://ya.ru"); //Результат для текущего времени: aHR0cDovL3lhLnJ1fHwxMzI2MDIzMjQ4 Функция расшифровки ссылки и проверки срока жизни, по умолчанию стоит 60 секунд. Если ссылка создана более минуты назад выведет "Срок жизни ссылки истек". PHP: function decode_link($code = false, $lifetime = 60) { if ($code) { $exp = explode("||", base64_decode($code)); if (time() - $exp[1] < $lifetime) { return $exp[0]; } else { echo "Срок жизни ссылки истек"; } } } Использование: PHP: decode_link("aHR0cDovL3lhLnJ1fHwxMzI2MDIzMjQ4", 60); //При неистекшем лайфтайме //Результат: http://ya.ru //При истекшем лайфтайме //Результат: Срок жизни ссылки истек
Я сделал вот так, но есть проблема, скачиваются только архивы, другие файлы - картинки txt, doc - испорчены и не работают: PHP: <?php $timeout = 3600; // Один час $filesdir = "downloads/"; // Слешь в конце // $secret = md5((int)(time() / $timeout)); //Всегда целое число, меняется раз в $timeout секунд; if( isset($_GET['key']) ) { if( ($_GET['key'] == $secret) && //проверка ключа strlen($_GET['fn']) && file_exists($filesdir.$_GET['fn']) ) { //проверка файла $fn = $_GET['fn']; $len = filesize($fn); header("Content-Transfer-Encoding: binary"); header('Content-Type: text/plain'); header('Content-Disposition: attachment; filename="'.rawurldecode($fn).'"'); // Это имя файла будет в браузере при скачке readfile($filesdir.$_GET['fn']);die; //читаем файл } else { header ( 'HTTP/1.1 404 Not Found' );//Файл не найден die; } } ?> Скачать:<a href="?fn=1111.JPG&key=<?=$secret;?>">Скачать картинка</a><br> Скачать:<a href="?fn=1111.txt&key=<?=$secret;?>">Скачать тхт</a><br> Скачать:<a href="?fn=1111.7z&key=<?=$secret;?>">Скачать архив</a><br> Скачать:<a href="?fn=1111.doc&key=<?=$secret;?>">Скачать doc файл</a> возможно ли это поправить в скрипте ? такая фраза появляется в скачанном блокноте: