временная ссылка

Discussion in 'PHP' started by GAiN, 6 Jan 2012.

  1. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,531
    Likes Received:
    166
    Reputations:
    99
    можно ли сделать временную ссылку средствами javascript и без базы данных?
     
  2. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Что значит временную?
     
  3. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,531
    Likes Received:
    166
    Reputations:
    99
    есть файл на сервере, надо скачать его через временную ссылку, которая действует для открывшего сайт браузера и будет действовать некоторое время - после чего, скачка станет недоступной
     
  4. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Только если когда ссылку формировать в нее запрятать время когда она создана, тип браузера и т.д

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

    НО открытие страницы и удаление кода/редактирование сводит работу к нулю
     
  5. nyakamedia

    nyakamedia New Member

    Joined:
    22 Sep 2010
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    например, такая ссылка -
    link.php?key=ZmlsZS5qcGd8MTMyNTgwODAwMA==&secret=0e0eb32628bc0ccef93eac5e954605e5

    параметр key = это base64 от "filename|timestamp", secret - md5 от "filename|timestamp|secretkey"

    в скрипте расшифровываешь base64, смотришь, не прошел ли еще timestamp, а потом генерируешь сам secret - если он совпадает с пришедшим - значит ссылка настоящая, потому что secretkey знаешь только ты.

    в md5 можно кроме секретного ключа добавить IP, название браузера - тогда ссылку будет проблемно кому-либо передать
     
    1 person likes this.
  6. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,531
    Likes Received:
    166
    Reputations:
    99
    nyakamedia, идея хороша, такая очень подойдёт, даже можно и по ip не проверятью, зачем усложнать )
    вот бы пример сатью прочитать как такое сделать, по примеру разберусь )
     
  7. Zombi ****

    Zombi **** Elder - Старейшина

    Joined:
    4 Apr 2009
    Messages:
    166
    Likes Received:
    183
    Reputations:
    17
    найми кодера он тебе накодит!
     
  8. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    Функция шифрования ссылки
    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
    //При истекшем лайфтайме
    //Результат: Срок жизни ссылки истек
     
    1 person likes this.
  9. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,531
    Likes Received:
    166
    Reputations:
    99
    Я сделал вот так, но есть проблема, скачиваются только архивы, другие файлы - картинки 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>

    возможно ли это поправить в скрипте ?
    такая фраза появляется в скачанном блокноте:
     
    #9 GAiN, 20 Feb 2012
    Last edited: 1 Mar 2012