Je reviens vous proposer un article, ce n’était pas prévu, mais je me suis heurté à un problème aberrant une bonne partie de l’après-midi, me faisant perdre un temps fou.
Je me suis replongé dans le développement Flex récemment pour un projet fort intéressant, tout allait bien et les manipulations de codes revenaient rapidement, puis avec Flex Builder, quel bonheur… Ensuite vient le soucis qui rend fou.
J’ai utilisé une classe actionscript d’upload d’images en passant en httpservice (pour l’instant ça me va), je passe par une classe PHP qui me récupère la session de l’utilisateur et qui me fait les enregistrements qui vont bien dans la bdd. Bien entendu, par défaut les tests s’opèrent sur IE, et tout fonctionne à merveille, je suis heureux, puis au moment de déployer mon appli, je la test sous Firefox et là !!!! Pas moyen de récupérer la session de l’utilisateur.
Après quelques recherches sur le net il s’avère que c’est un problème connu depuis trèèèèèèès longtemps par les utilisateurs, mais surtout par Adobe !!! FileReference.upload ne permet pas de récupérer et d’utiliser les sessions PHP ou autres, et ce sur plusieurs navigateurs, en fait tous sauf IE !!! Incroyable non ? Sachant que l’argument premier pour attirer à la programmation flex (contre ajax par exemple) c’est que les applications sont compatibles et idem sur tous navigateurs… Mouai….
Bon, après plusieurs cafés, plusieurs recherches, quelques arrachages de cheveux et quelques heures perdus, j’ai pu rassembler une solution correct.
Voici la méthode avec AMF (AMFPHP entre autre) :
il suffit de renvoyer la session :
session_start();
class getUser{
function getUser(){
[...]
}
function serviceReturnSESSID(){
return session_id();
}
}
?>
Puis de compléter l’url qui appelle la classe/méthode/fonction d’upload en php
public function getUser():void{
var servRO:RemoteObject = new RemoteObject;
servRO.source = "getUser"
servRO.destination = "amfphp"
servRO.endpoint = "http://localhost/amfphp/gateway.php"
servRO.serviceReturnSESSID.addEventListener("result", getUserHandler);
servRO.serviceReturnSESSID.addEventListener("fault", resultatKo);
servRO.serviceReturnSESSID();
}
// Si le retour de la recup de session n'a pas fonctionné
public function resultatKo(e:FaultEvent):void{
// On affiche le problème
Alert.show(e.fault.faultString, e.fault.faultCode.toString());
}
//On récupère le résultat de la session de l'utilisateur puis on affecte cette valeur au fichier upload php
private function getUserHandler(evt:ResultEvent):void{
userID = String(evt.result);
uploadFile = 'http://localhost/upload.php?sessidforupload='+userID;
fileUpload.init(uploadProgress, cancelUpload, uploadFile);
}
et dans le fichier php d’upload, rajouter en début :
Si vous avez des questions ou des doutes n’hésitez pas, si ça peut vous éviter de galérer sur un élément que je trouve hallucinant, surtout que ce bug date de bien avant 2008…
Bon code
Articles qui pourraient vous intéresser :
- Pajinate – Plugin jQuery – La pagination en javascript
- jQuery – 20 plugins jQuery à retenir
- jqIsoText – Plugin jQuery – Effet de texte isométrique
- YoxView – Plugin jQuery – Une lightbox améliorée
- Quicksand – Plugin jQuery – Trie et filtre avec effets d’animations
scrolling="no" frameborder="0"
style="border:none; width:540px; height:50px">








[...] This post was mentioned on Twitter by Ludik Te@m, sankouh. sankouh said: Je reviens vous proposer un article, ce n’était pas prévu, mais je me suis heurté à un problème aberrant une bonne… http://bit.ly/chMSbG [...]
[...] Flex – PHP – FileReference.upload – Upload et perte de session [...]
[...] Flex – PHP – FileReference.upload – Upload et perte de session [...]
[...] Flex – PHP – FileReference.upload – Upload et perte de session [...]