Вопрос

Я использую загрузку, и я не могу установить сеансы в своих файлах PHP, мой скрипт выглядит так:

    $("#uploadify").uploadify({
        'uploader'       : '/extra/flash/uploadify.swf',
        'script'         : '/admin/uploads/artistsphotos',
        'scriptData'     : {'PHPSESSID' : '<?= session_id(); ?>'},
        'cancelImg'      : '/images/cancel.png',
        'folder'         : '/img/artists',
        'queueID'        : 'fileQueue',
        'auto'           : false,
        'multi'          : true,
        'onComplete'     : function(a, b, c, d, e){

        },  
        'onAllComplete': function(event,data){
            $bla = $('#art').find(':selected',this);
            $fi  = $bla.val();
             $.ajax({
               type: "POST",
               url: "/admin/uploads/artistsphotosupload",
               data: "artist="+$fi,
               success: function(msg){
                 console.log(msg);
               }
             });
     }
});

И в PHP, если я попробую:

$_SESSION['name'] = 'something';

Я не могу получить к нему доступ в другом файле. И у меня есть session_start (); активировали какие -либо решения?

Это было полезно?

Решение

Обычно идентификатор сеанса не будет прочитан с поста. Вы могли бы сделать это:

$_COOKIE['PHPSESSID'] = $_POST['PHPSESSID'];
session_start();

Другие советы

Вы не можете решить это, потому что uploadify имеет собственный идентификатор сеанса, который создается Flash Player. Другими словами, Flash Player получает доступ к сценарию загрузки в качестве нового пользователя и получает новый сеанс. Единственный способ решить эту проблему - это пройти текущую страницу session_id через публикацию в сценарий загрузки.

Я нашел решение, которое гораздо проще реализовать, особенно если у вас уже есть ориентированный на сеанс бэкэнд для входа в систему и т. Д.:

Просто напишите следующий код в заявлении jQuery:

'script'    : '/upload.php?<?= session_name(); ?>=<?= session_id(); ?>',

который волшебным образом прикрепит ваше текущее имя сеанса и идентификатор сеанса.

Это может работать, но с точки зрения безопасности - действительно плохая практика. Это позволило бы любому, у кого есть действительный SessionId, выдать себя за этот сеанс, просто изменив SessionID. Было бы лучше сделать даже базовый синхронный шифрование сеанса с секретным ключом (известным только кодом бэкэнда), а затем расшифро тактирует его в скрипте upload.php.

В настоящее время у меня аналогичная проблема с сеансами загрузки + PHP.

Используя error_log () Я могу контролировать, что при загрузке приложения Flash отправляет данные файла на сервер, оно передает правильный session_id в скрипт загрузки:

'scriptdata': {'session_id': session_id},

(session_id set ранее: var session_id = '';)

Итак, это позволяет мне проверить, что да, идентификатор сеанса для моих страниц и идентификатор сеанса для сценария загрузки на самом деле одинаковы.

Но когда сценарий запускается, и я начинаю сеанс с:

session_id ($ session_id); session_start ();

Каким -то образом все данные сеанса разрушены (я также устанавливал данные сеанса в массив, чтобы я мог обновлять и наблюдать, как данные растут с каждым запросом, а затем, когда я использую загрузку, он уничтожен).

Я понятия не имею, как отладить это:/

РЕДАКТИРОВАТЬ: Сухозин может уничтожить сессию:

http://www.uploadify.com/forum/viewtopic.php?f=7&t=2062

Добавьте это перед вашим внешним файлом .js с помощью реализации uploadify.

<!-- Get sesssionId -->
 <script type="text/javascript" charset="utf-8">
  var sessionId = "<?php echo session_id(); ?>";
 </script>

Затем добавьте это в сценарий загрузки.

$('#uploadify').uploadifySettings('scriptData', {'sessionId': sessionId});

PHP загрузить скрипт нуждается в этом.

// Start session
 session_id($_POST['sessionId']);
 session_start();

Все сделано!

Прочитав все блестящие ответы, касающиеся безопасности и метода, я работал над проблемой, и я опубликую ее здесь на благо других. Пропустить дно для решения, это все, что имеет значение, верно? ;).

Uploadify использует свой собственный сеанс по умолчанию ...

Это раздражение, которое означает, что при доступе к uploadify.php любые переменные сеанса, которые вы ранее сохранили, не могут быть доступны из текущего сеанса (загрузка). По сути, вы смотрите на объект сеанса, который совершенно не связан с сеансом, который вы сделали. Ааа, так что мы делаем, пропустите его через JavaScript?

Вы "можете" передать ссылку на сеанс через JavaScript, но JavaScript является клиентской (пользовательской) стороной, и из -за этого пользователь может изменить ссылку на сеанс, прежде чем он будет отправлен на сервер. Он мог эффективно подделать свой сессионный идентификатор. Это на самом деле ужасно опасно, по крайней мере, в случае моего заявления.

Решение...

Не используйте session_start () session_start (), на который AFAIK не может быть ссылается на удостоверение личности. Вместо этого, каждый раз, когда вы используете Session_Start (), устанавливайте идентификатор для сеанса, который вы хотите использовать, (который, как я чувствую, является хорошей практикой независимо).

Каждый раз, когда вы хотите начать сеанс

session_id ("idhere");

session_start ();

Важно: установить уникальный сеанс для каждого пользователя.

Сеансы - это переменные, передаваемые между сервером и любым другим клиентом, подключающимся с безрассудным отказом. Если вы хотите сохранить переменные сеанса, которые являются уникальными для каждого отдельного пользователя вашего сайта, Session_ID должен быть своего рода совершенно уникальным динамическим идентификатором по сравнению с этим пользователем. К этому можно получить доступ от файла cookie или более надежного базы данных (уникальный идентификатор пользователя?).

РЕДАКТИРОВАТЬ: После небольшого исследования кажется, что сеансы по умолчанию (без идентификатора) используют SessionId «PhpsSsyd». Поэтому, хотя я еще не пробовал, настройка session_id ("phpsessid"), прежде чем вы запустите сеанс в uploadify.php также могут решить проблему.

Но, тем не менее, если плагин только так, как оказалось, использует для вас идентичную переменную сеанса внутри того же сеанса, проблемы могут возникнуть, так что, вероятно, лучше всего сделать ваш сеанс с собственным уникальным идентификатором в любом случае.

Поместите скрытую метку в документ id = "id_usuario_logueado" and value $_SESSION[id]

Просто напишите следующий код в jQuery утверждение:

'scriptData': {'id_usuario':$('#id_usuario_logueado').text()},

Позже в PHP

$id_usuario = $_POST['id_usuario'];

Я нашел решение, если ваш бэкэнд -скрипт нуждается в аутентификации и перенаправлении, вы получите проблему 302 - просто создайте новый контроллер или скрипт, который не нуждается в аутентификации.

Затем из приведенного выше кода изменить «Скрипт»: '/admin/uploads/artistsphotos', на «script ':'/admin/uploads-unprotected/artistsphotos/id = <? Php echo md5 ($ theusersessionId); ?> ',

Затем в своем сценарии бэкэнд просто проверьте идентификатор, который был передан, и аутентифицируйте запрос на загрузку с другой стратегией.

Вот ответ непосредственно от загрузки: Использование сеансов с загрузкой

В твоей .php Это называет Ajax:

'scriptData': {'<?php echo session_name();?>':'<?php echo session_id();?>'},

И в твоем uploadify.php (Программа получения/сохранения)

$session_name = session_name();

if (!isset($_GET[$session_name])) {
    exit;
} else {
    session_id($_GET[$session_name]);
    session_start();
}

Я использую 2.1.4, и это работает как очарование переменных сеанса.

$(document).ready(function() {



nombre = $('#uploadify1').val(); //first input

autor = $('#uploadify1').val();   // second one



$("#uploadify").uploadify({

    'uploader'       : UPLOADIFY_URL+'scripts/uploadify.swf',

    'script'         : 'ticket_docs_uploadify.php',

    'cancelImg'      : UPLOADIFY_URL+'cancel.png',

    'folder'         : 'ticket_document_uploads',

    'queueID'        : 'fileQueue',

    'checkScript'    : 'ticket_docs_check.php?nombre='+nombre+'&autor='+autor,

    'fileDesc'       : 'I am testing uploadify',

    'buttonText'     : 'Upload',

    'scriptData'     : {'sessTempTickedId': '<?php echo $_SESSION['sessTempTickedId'];?>', 'pkEmployeeID': '<?php echo $_SESSION['pkEmployeeID'];?>', 'EmployeeDepartment': '<?php echo $_SESSION['EmployeeDepartment'];?>' },

    'auto'           : false,

    'multi'          : true,        

    'onComplete'     : function(a, b, c, d, e){

        //alert(a+b+c+d+e);

    },

    'onAllComplete': function(event,data){

        //something here             alert('asdasd');             alert(json_decode(data));            

    }

});

});



<?php include_once('../../common/inc/connectdb.inc.php');

if (!empty($_FILES))

{

$tempFile = $_FILES['Filedata']['tmp_name'];

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';

//change the file name here



$fileName = time();



$arrFile = pathinfo($_FILES['Filedata']['name']);



$strFileExt = strtolower($arrFile['extension']);



$strFileName = $arrFile['filename'];



$strFileBaseName = $arrFile['basename'];



$fileName = $fileName.'.'.$strFileExt;



$targetFile = str_replace('//','/',$targetPath) . $fileName;



$sql = "INSERT INTO ticket_documents (fkTicketID,fkEmployeeID,fkDepartmentID,TicketDocumentName,TicketDocumentLabel) VALUES ('".$_POST['sessTempTickedId']."','".$_POST['pkEmployeeID']."','".$_POST['EmployeeDepartment']."','".$fileName."','".$_FILES['Filedata']['name']."')";

mysql_query($sql) or die(mysql_error());



move_uploaded_file($tempFile,$targetFile);

echo "1";

}

?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top