Pregunta

Estoy usando uploadify y no puedo configurar sesiones en mis archivos php, mi script se ve así:

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

Y en php si intento:

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

No puedo acceder a él en otro archivo y tengo session_start();¿Activó alguna solución?

¿Fue útil?

Solución

Por lo general, el ID de sesión no se leerá de la POST. Usted puede hacer esto:

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

Otros consejos

no se puede resolver este identificador de sesión, porque tiene su propio uploadify que se crea por reproductor flash. En otras palabras, el reproductor Flash Access uploadify el guión como un nuevo usuario y obtiene una nueva sesión. La única manera de resolver esto es para pasar corriente a través de la página session_id posterior al guión uploadify.

he encontrado una solución que es mucho más fácil de implementar, especialmente si usted ya tiene un motor que PHP orientado a la sesión de inicio de sesión, etc:.

acaba de escribir el siguiente código en la declaración de jQuery:

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

que se adjunte mágicamente su nombre de la sesión actual y su identificador de sesión.

Esto puede funcionar, pero desde una perspectiva de seguridad es realmente una mala práctica. Esto permitiría que cualquier persona con un Id.sesión válida para suplantar esa sesión con sólo cambiar el sessionid. Sería mejor que hacer incluso un cifrado síncrono básica del sessionid con una clave secreta (que sólo conoce el código de fondo) y, a continuación, descifrarlos en el guión upload.php.

Actualmente estoy teniendo un problema similar con sesiones Uploadify + PHP.

El uso de error_log () puedo controlar que cuando la aplicación de flash uploadify envía los datos del archivo al servidor, pasa el session_id correcta al script de carga:

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

(session_id fijado anteriormente: session_id var = '';)

Así, que me permite comprobar que sí, el identificador de sesión para mis páginas y el identificador de sesión para el script uploadify son de hecho el mismo.

Sin embargo, cuando se ejecuta el script y comienzo de la sesión por:

session_id ($ session_id); session_start ();

De alguna manera se destruyeron todos los datos de sesión (También he estado fijando los datos de sesión en una matriz para que pueda refrescarse y ver los datos crecen con cada solicitud, a continuación, cuando uso uploadify, se limpió).

No tengo ni idea de cómo depurar este: /

editar: suhosin puede estar destruyendo la sesión:

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

Añadir esto antes de su archivo .js externo con la implementación uploadify.

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

A continuación, añadir esto a la secuencia de comandos uploadify.

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

script PHP envío necesita esto.

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

Todo hecho!

Después de leer todas las brillantes respuestas sobre seguridad y método, solucioné el problema a mi manera y lo publicaré aquí para beneficio de otros.Vaya al final para encontrar la solución, es lo único que importa, ¿verdad?;).

Uploadify usa su propia sesión predeterminada...

Esto es una molestia que significa que al acceder a uploadify.php, no se puede acceder a ninguna variable de sesión que haya almacenado previamente desde la sesión actual (uploadify).Básicamente, estás mirando un objeto de sesión que no tiene ninguna relación con la sesión que realizaste.Aaah, entonces ¿qué hacemos, pasarlo por javascript?

Usted "puede" pasar una referencia a la sesión a través de javascript, pero javascript es del lado del cliente (usuario) y, debido a esto, un usuario puede cambiar la referencia de la sesión antes de enviarla al servidor.Podría falsificar efectivamente su identificación de sesión.En realidad, esto es terriblemente peligroso, al menos en el caso de mi solicitud.

La solución...

NO utilice el session_start() predeterminado por sí solo, al que AFAIK no se puede hacer referencia mediante una ID.En su lugar, cada vez que use session_start(), establezca una ID para la sesión que desea usar (lo cual ahora creo que es una buena práctica de todos modos).

CADA VEZ que desees iniciar una sesión

session_id("IDaquí");

inicio_sesión();

IMPORTANTE:Establecer una sesión única para cada usuario.

Las sesiones son variables compartidas entre el servidor y todos los demás clientes que se conectan con abandono imprudente.Si desea almacenar variables de sesión que sean únicas para cada usuario individual de su sitio, session_id TIENE que ser algún tipo de ID dinámica completamente única relativa a ese usuario.Se puede acceder a esto desde una cookie o, de manera más segura, desde una base de datos (¿la identificación única del usuario?).

Editar:Después de investigar un poco, parece que las sesiones predeterminadas (sin ID) usan el ID de sesión "PHPSESSID".Entonces, aunque aún no lo he probado, configurar session_id("PHPSESSID"), antes de iniciar la sesión en uploadify.php también puede solucionar el problema.

Pero aún así, si un complemento usa una variable de sesión idéntica a la suya dentro de la misma sesión, podrían surgir problemas, por lo que probablemente sea mejor crear su sesión con su propia ID única de todos modos.

poner una etiqueta de piel en el documento con id = "id_usuario_logueado" and value $_SESSION[id]

acaba de escribir el siguiente código en la declaración jQuery:

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

más adelante en PHP

$id_usuario = $_POST['id_usuario'];

He encontrado la solución, si la secuencia de comandos de back-end necesita autenticación y redirige obtendrá el problema 302 - basta con crear un nuevo controlador o un script que no requiere autenticación

.

A continuación, en el código anterior el cambio 'Guión': '/ admin / uploads / artistsphotos', A 'Guión': '/ admin / uploads-desprotegidos / artistsphotos / id = ',

A continuación, en el script backend simplemente verificar la identificación de que fue aprobada y autenticar la solicitud de carga con una estrategia diferente.

Aquí está la respuesta directamente de uploadify: Utilización de sesiones con Uploadify

En su .php que llama al Ajax:

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

Y en su uploadify.php (recepción / Programa de ahorro)

$session_name = session_name();

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

Estoy usando 2.1.4, y funciona como un encanto para las variables de sesión.

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

}

?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top