Conservare la sessione in Flash AS3 + PHP

Stavo facendo un sito in cui gestivo una sessione PHP tramite cookie, come di default in PHP e a parer mio come consigliabile, e in questo sito c'era una parte in Adobe Flash che richiamava un file PHP il quale doveva leggere le variabili di sessione. Però non funzionava, perché Flash perdeva il cookie di sessione. Ecco come ho risolto.

Innanzitutto ho creato una funzione per leggere, tramite javascript, l'ID di sessione dai cookie:

	private function getPHPSessId():String {
    var cookieValue:*=ExternalInterface.call("function(){return document.cookie;}");
    var cookies:Array=cookieValue.split(";");
    for(var i:uint=0;i<cookies.length;i++) {
         while(cookies[i].charAt(0)==' ') cookies[i]=cookies[i].substring(1,cookies[i].length);
         if(cookies[i].length>10&&cookies[i].substring(0,10).toLowerCase()=="phpsessid=") {
             return cookies[i].substring(10);
             }
         }
    return "";
    }

Ora che sono riuscito ad ottenere l'ID di sessione, non mi resta che passarlo al file PHP di destinazione.
Si possono passare i cookie impostando un header ad hoc nella URLRequest:

	var urlRequest:URLRequest=new URLRequest("target.php");
urlRequest.method=URLRequestMethod.POST;
var postData:URLVariables=new URLVariables();
postData.phpsessid=getPHPSessId();
urlRequest.data=postData;
navigateToURL(urlRequest);

C'è un problema: se state usando la funzione upload() questo metodo NON funziona! Infatti upload() se ne infischia degli header che ho creato. L'unica soluzione è passare le variabili via GET:

	var urlRequest:URLRequest=new URLRequest("target.php?sessid="getPHPSessId());
var file=FileReference(myFileRef);
file.upload(urlRequest);

E quindi utilizzarle con PHP per ricostruire la sessione:

	<?
if(isset($_GET['sessid'])) session_id($_GET['sessid']);
session_start();
?>

Così funziona.