Domanda

sto usando uploadify, e non riesco a impostare le sessioni nei miei file php, il mio script è simile al seguente:

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

E in php se provo:

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

Non riesco ad accedere in un altro file.and ho session_start (); attivato Eventuali soluzioni?

È stato utile?

Soluzione

Di solito l'ID di sessione non verrà letta dal POST. Si potrebbe fare questo:

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

Altri suggerimenti

Non si può risolvere questo perché uploadify è proprio ID di sessione che è stato creato da Flash Player. In altre parole il flash player accedere allo script uploadify come nuovo utente e ottiene una nuova sessione. L'unico modo è possibile risolvere questo problema è quello di passare la corrente session_id pagina tramite posta allo script uploadify.

Ho trovato una soluzione che è molto più facile da implementare, soprattutto se si dispone già di un backend PHP session-oriented per il login, ecc.

basta scrivere il codice seguente nella dichiarazione jQuery:

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

che sarà magicamente allegare il tuo nome della sessione corrente e la sessione id.

Questo può funzionare, ma dal punto di vista della sicurezza è davvero una cattiva pratica. Ciò consentirebbe a chiunque con un sessionID valida per impersonare quella sessione semplicemente cambiando il sessionid. Sarebbe meglio fare ancora una crittografia di base sincrona del sessionid con una chiave segreta (conosciuta solo per il codice backend), e poi decifrare sullo script upload.php.

Al momento sto avendo un problema simile con sessioni uploadify + PHP.

Uso error_log () posso controllare che quando il flash applicazione uploadify invia i dati del file fino al server, passa il session_id corretto allo script di upload:

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

(session_id impostato in precedenza: var session_id = '';)

Quindi, che mi permette di verificare che sì, l'id di sessione per le mie pagine e l'ID di sessione per lo script uploadify sono di fatto la stessa.

Ma, quando lo script viene eseguito e avviare la sessione:

session_id ($ session_id); session_start ();

In qualche modo tutti i dati di sessione viene distrutta (Ho anche i dati di impostazione della sessione in un array in modo da poter aggiornare e guardare i dati di crescere ogni richiesta, quindi quando lo uso uploadify, è cancellato).

Non ho nessuna idea su come eseguire il debug di questo: /

modifica: Suhosin può essere distruggendo la sessione:

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

Aggiungi questo prima il vostro file .js esterni con l'attuazione uploadify.

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

Quindi aggiungere questo allo script uploadify.

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

script di upload PHP ha bisogno di questo.

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

Tutto fatto!

Dopo aver letto tutte le risposte brillanti sia per quanto riguarda la sicurezza e il metodo, ho lavorato il mio modo per aggirare il problema, e vi posterò qui per il beneficio degli altri. Passa al fondo per la soluzione, è tutto quello che conta giusto? ;).

Uploadify utilizza il proprio sessione predefinita ...

Questo è un fastidio che significa che quando si accede uploadify.php, tutte le variabili di sessione si era precedentemente memorizzate non possono essere raggiunti dagli attuali (uploadify) sessione. Sei essenzialmente guardando un oggetto sessione che è completamente estraneo alla sessione che hai fatto. Aaah, così che cosa facciamo, farlo passare attraverso il javascript?

È "possibile" passa un riferimento alla sessione tramite JavaScript, ma JavaScript è cliente (utente) lato, e per questo, un utente può modificare il riferimento della sessione prima di essere espulso al server. Poteva effettivamente falso il suo ID di sessione. Questo è in realtà terribilmente pericoloso, almeno nel caso della mia applicazione.

La soluzione ...

Non utilizzare il session_start di default () su di essa la propria, che per quanto ne so non è possibile fare riferimento da un ID. Invece, ogni volta che si utilizza session_start (), impostare un ID per la sessione che si desidera utilizzare, (che ora mi sento è una buona pratica a prescindere).

ogni volta che si desidera avviare una sessione

session_id ( "IDHere");

session_start ();

. IMPORTANTE: L'impostazione di una sessione univoca per ciascun utente

Le sessioni sono variabili condivise tra il server e tutti gli altri client che si connette con sconsiderato abbandono. Se si desidera memorizzare le variabili di sessione che sono unici per ogni singolo utente del sito, il session_id deve essere una sorta di dinamica completamente unico ID relativi a quell'utente. Questo si può accedere da un cookie, o in modo più sicuro di un database (ID univoco dell'utente?).

Edit: Dopo un po 'di ricerca, sembra che le sessioni di default (senza un ID) utilizzano il sessionID "PHPSESSID". Quindi, anche se non l'ho ancora provato, impostando session_id ( "PHPSESSID"), prima di iniziare la sessione in uploadify.php potrebbe risolvere il problema troppo.

Ma ancora, se un plugin così succede di utilizzare una variabile di sessione identica a voi all'interno della stessa sessione, problemi potrebbero sorgere, quindi è probabilmente meglio per rendere la sessione con il proprio ID univoco in ogni caso.

mettere una pelle etichetta nel documento con id = "id_usuario_logueado" and value $_SESSION[id]

basta scrivere il codice seguente nella dichiarazione jQuery:

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

più avanti in php

$id_usuario = $_POST['id_usuario'];

ho trovato la soluzione, se lo script di backend richiede l'autenticazione e reindirizza si otterrà il problema 302 - è sufficiente creare un nuovo controller o uno script che non ha bisogno di autenticazione

.

Poi, dal codice di cui sopra cambiamento 'Script': '/ admin / uploads / artistsphotos', Per 'Script':? '/ Admin / uploads-non protetti / artistsphotos / id = ',

Poi, nel vostro script backend semplicemente controllare l'ID che è stato passato e autenticare la richiesta di upload con una strategia diversa.

Ecco la risposta direttamente da uploadify: Utilizzo di sessioni con Uploadify

Nel vostro .php che chiama l'Ajax:

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

E nel tuo uploadify.php (ricezione / programma di risparmio)

$session_name = session_name();

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

sto usando 2.1.4, e funziona come un fascino per le variabili di sessione.

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

}

?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top