Me pone programar

Más que me pone, digamos que me gusta y disfruto con ello

Me pone programar

Blog personal sobre PHP, JavaScript, CSS, Estándares, Flash i demás temas interesantes del mundo de la informática e Internet

Upload en PHP y Flash. ¿Donde está mi sesión?

30/05/2008 a las 12:25 por Shox

Estos dias he estado trabajando en un upload en Flash y PHP (también utiliza Javascript para llamadas en AJAX) y me he encontrado con un bug de Flash muy curioso.

Flash no envia ni la sesión ni las cookies al PHP, con lo que no se puede hacer ninguna validación de usuario o cosas por el estilo. Al llegar al PHP tenemos una variable de sesión que no es la que teniamos originalmente. Por lo que he leido esto falla siempre en navegadores que no sean Internet Explorer, y a menudo en IE no envia todas las cookies, por lo que no podemos estar seguros.

Después de mucho leer, la solución no es tan complicada como cabía esperar tras ver el problema:

1.- Primero de todo, hay que pasarle el valor de la cookie por flashvars al Flash:

JavaScript:
  1. flashvars: 'cookie=' + document.cookie

2.- En el flash cogemos este valor

Actionscript:
  1. var url:String = "upload.php" + '?cookie=' + _root.cookie;

Donde la url será a la que llamaremos con la función upload de flash

3.- En el PHP recogemos la cookie que hemos enviado por get, y seteamos la variable de sesión a su valor original. En varios sitios he leido que esto funcionaba:

PHP:
  1. list($cookieName, $cookieValue) = str_split('=', $_GET['cookie']);
  2.  
  3. session_name($cookieName);
  4. session_id($cookieValue);
  5.  

pero en mi caso no funcionó. Por lo tanto cree una manera alternativa:

En ambos casos, hay que declarar el session_name y session_id antes de hacer el session_start. En el caso que yo comento, sólo me quedo con la variable de session de PHP, ya que el resto no me interesaba.

Categorías: AJAX, Flash, PHP
Tags: , , , , ,

2 comentarios

  1. RobertoGA dice:

    Gracias por la info,

    Tengo que decir que en local me funciona perfectamente, las sesiones las recibe el php a la primera, sin ningún conflicto.

    Cuando lo subo al server, me ocurre casi lo mismo que comentas. También estoy haciendo un upload, cuando lee la lista de archivos del directorio lo hace correctamente, se situa en el directorio del usuario enviado en la session, pero cuando realizao el upload no le manda el valor, subiendo el archivo a una carpeta erronea.

    ¿Puedes decirme como lo solucionaste? Gracias por todo

  2. Shox dice:

    Roberto, puedes que estes teniendo problemas al pasarle el directorio de forma relativa y se guarde en un sitio incorrecto. Prueba de pasarlo en absoluto a ver si funciona.

Deja tu comentario

Nota: Comentarios moderados. En breve será publicado el tuyo.