Подтвердить что ты не робот

Сессии и добавление

Я использую uploadify, и я не могу устанавливать сеансы в своих php файлах, мой script выглядит следующим образом:

    $("#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(); активированный Любые решения?

4b9b3361

Ответ 1

Обычно идентификатор сеанса не считывается из POST. Вы можете сделать это:

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

'scriptData': {'session_id': session_id},

(session_id установлен раньше: var session_id = '';)

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

Но, когда запускается script, и я запускаю сеанс:

session_id ($ session_id); session_start();

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

Я не знаю, как отлаживать это:/

edit: suhosin может уничтожить сеанс:

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

Ответ 6

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

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

Затем добавьте это в uploadify script.

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

Загрузка PHP script нуждается в этом.

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

Все сделано!

Ответ 7

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

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

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

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

Решение...

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

КАЖДОЕ ВРЕМЯ, вы хотите начать сеанс

session_id ( "IDHere" );

session_start();

ВАЖНО: настройка уникального сеанса для каждого пользователя.

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

Изменить: после небольшого исследования кажется, что сеансы по умолчанию (без идентификатора) используют sessionID "PHPSESSID". Поэтому, хотя я еще не пробовал это, установив session_id ( "PHPSESSID" ), перед началом сеанса в файле uploadify.php также может возникнуть проблема.

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

Ответ 8

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

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

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

позже в php

$id_usuario = $_POST['id_usuario'];

Ответ 9

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

Затем из приведенного выше кода измените 'script': '/admin/uploads/artsphotos', к 'script': '/admin/uploads-unprotected/artsphotos/id = <? php echo md5 ($ theUserSessionId);? > ",

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

Ответ 10

Вот ответ непосредственно из uploadify: Использование сеансов с Uploadify

В вашем .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, и он работает как прелесть для переменных сеанса.

Ответ 11

$(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";

}

?>