Bonjour à vous,

Comme le titre de ce topic ne l'indique pas, il ne s'agit pas ici de la perte totale de la session en raison de l'utilisation d'un sombre plugin flash comme il en est maintes fois question.

J'emploie le plugin jQuery Uploadify à ce qu'il sait faire de mieux : l'upload de fichiers vers un serveur Apache.
Je précise correctement, comme on peut le voir à plein d'endroits sur le net, l'id de la session en cours (en remplacement de celle que le player Flash peut récupérer de son côté).

Ainsi je vérifie bien que j'ai les mêmes id de session sur mon client HTML (fabriqué par un contrôleur Zend A) et sur le gestionnaire d'upload (géré par un contrôleur Zend B).
Les uploads pouvant être multiples, je stocke des références aux fichiers dans un tableau lui-même stocké dans les données de session. Le player flash fait une requête différente par fichiers.

C'est là que ca se complique : lorsque j'utilise Internet Explorer, le tableau de références se complète bien à chaque upload et sur la page qui suit, je retrouve bien tous mes fichiers. Sur Firefox 7.0.1, le tableau est recrée à chaque requête POST d'upload comme si je n'avais rien fait précédemment. Ainsi, en fin de traitement, on ne se retrouve qu'avec le dernier fichier uploadé dans la liste.
J'utilise de manière tout à fait standard un Zend_Session_Namespace pour écrire dans mon tableau et voici mon code :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
		$measure_type = $this->_request->getParam("type");
		$measure_session = $this->_request->getParam("session");
 
		$measure_id = md5(time().$measure_type);
		$file_name = $this->get_local_file_name($measure_id, $measure_type); // On calcule le nom du fichier sur le serveur...
 
		if (!empty ($measure_session) && session_id() != $measure_session){
			session_id ($measure_session);
			Zend_Session::start();
		}
 
		$upload = new Zend_File_Transfer_Adapter_Http();
		$upload->addValidator('Count', false, array('min' =>1, 'max' => 1))
			   ->addFilter ('Rename', "../data/tmp/".$file_name);
 
		$upload->receive();
 
		// Analyse du fichier uploadé
		$measure_file = @fopen ("../data/tmp/".$file_name, "r");
		$response = array("result"=>"ok", "mid"=>$measure_id, "type"=>$measure_type);
 
		// Ajout dans la liste des fichiers de la session
		$measureSNS = new Zend_Session_Namespace ("measures");
		$measures_list = array();
		if (!is_array ($measureSNS->measures_list)){
			$measureSNS->measures_list = array();
		}else{
			$measures_list = $measureSNS->measures_list;
		}
 
		$measures_list[$measure_id] = $response;
		$measureSNS->measures_list = $measures_list;
 
		return $this->_helper->json($response);

Est-il possible que dans un seul des deux cas, le Zend_Session_Namespace n'écrive pas dans la session?
Que je soit sur firefox, j'ai bien les deux mêmes id de session au moment de renseigner le contenu du tableau.

Ne comprenant pas ce qu'il se passe réellement, auriez-vous de plus amples explications?

Merci par avance.