Как обезопасить пропуск и установить идентификатор сессии? - PullRequest
0 голосов
/ 04 ноября 2010

Я использую uploadify, и скрипт (который использует Adobe Flash) создает новый сеанс вместо текущего, когда запрашивает URL-адрес действия загрузки.Чтобы это исправить, мне нужно передать идентификатор сеанса.

Есть ли способ сделать это без фиксации разрешения сеанса (перехвата)?

Вот некоторые детали проблемы:Сеансы и загрузки

Спасибо!

1 Ответ

2 голосов
/ 05 ноября 2010

Создайте временную сессию загрузки в вашем скрипте (не проверено, но вы получаете возможность иметь несколько разных сессий):

<?php
//normal session
session_start();
//store sessionid for retrieval
$oldsessionid = session_id();
if($_SESSION['logged_in']){ //or however you check for a valid user
    //stop old/normal session
    session_write_close();   
    //create a new sessionname
    $oldname = session_name('UPLOADSESSION');
    //create a new id (fixed here, you might want a random number/char combo:
    session_id('myuploadsessionid');
    //start the session
    session_start();
    $_SESSION['upload'] = true;
    $uploadid = session_id();
    //now you can use `'data: "artist="+$fi+"&UPLOADSESSION="'.$uploadid` in uploadify
    session_write_close();
}
//return to normal name
session_name($oldname);
//set old session id
session_id($oldsessionid);
//resume normal session
session_start();

Итак, в вашем принимающем скрипте:

<?php
session_name('UPLOADSESSION');
session_id($_POST['UPLOADSESSION']);
session_start();
if(isset($_SESSION['upload']) && $_SESSION['upload']){
   //accept files
   //invalidate session after this upload
   $_SESSION['upload'] = false;
}

У пользователя по-прежнему будет 2 куки, и, возможно, UPLOADSESSION зафиксирован, но вы не используете его для чего-либо еще, кроме загрузки, и только для 1 загрузки (хотя вы можете разрешить больше).

В качестве альтернативы, вы можете просто вызвать session_regenerate_id(); по первому запросу после загрузки (просто установите флаг в $_SESSION при загрузке).

...