Sessions sur 2 scripts

Signaler
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016
-
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016
-
Salut,
SI Quelqu'un pouvait m'expliquer le pb suivant et comment le résoudre:

Dans le corps de mon script principal  index.php , j'insere une balise image echo ''
Dans le fichier img.php se trouve  l'instanciation d'un objet de classe image ainsi qu'une methode qui renvoit l'image créée (la seule sortie sur cette page avec son header bien sur).
Lors de l'appel d'une méthode de cette classe image, je créé un map html  et le stocke dans une variable de session puis la récupére dans le script principal.
 Le problème  c'est que ma session est déjà ouverte par session_start() avant l'exécution d'image.php et que l'affectation du map en variable de session, qui nécessite un autre session_start (),  n'est plus en cache lorsque j'essaie de la récupérer dans le script principal.
 Voici les étapes de mon script:

<?php
session_start();
?>
<html>

<?php
echo '';
$map= $_SESSION['map'];
echo '<map name ="img">'.$map.'</map>';
//Et là le message Notice: Undefined index: map in D... apparait alors que map est bien présent dans
// le fichier de session.
?>

</html>
le truc serait peut être d'utiliser ob_start et ob_end_flush mais j'ai essayé (peut-être mal) et ça ne marche pas.  
MERCI pour votre aide,

5 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Hello,

bah ouais...la variable sera prise en compte seulement au 2d retour vers le serveur.
Tu ne vas pas pouvoir faire ça comme ça...
Si tu raffraichis ta page, tu verras que ta variable est initialisée, après.
Un truc dans le genre devrait marcher  (à creuser, je n'ai pas vérifié):
<?php
session_start ();
?>

<?php
$sPath = session_save_path ();
$sVar = file_get_contents ($sPath.'/sess_'.session_id ());
session_decode ($sVar);
print_r ($_SESSION);
?>
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016

salut, ouais mais en fait ce que je disais n'était pas juste car si je fais sleep() après le tag< img>, ma variable de session n'est pas encore dans le fichier bien que j'ai fait un commit dans la methode appellée par img.php.
J'ai l'impression que le script principal s'execute dans son intégralité avant que img.php ne soit éxécuté.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Ce qui est normal...le html est toujours executé après le php. Or, ta balise est une balise html. Donc oui, c'est bien ce qu'il se passe. Tout le php est exécuté, le html généré...donc appel à ton img.php, mise en session...à la fin.  Je suppose.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
d'ailleurs mon code ne peut pas marcher du  coup, lol.
Ca se passe comme ça : ton utilisateur appelle ta page avec ta balise img. la PHP de cette page est exécuté. le html généré envoyé au navigateur. Le navigateur parsele html...voit la balise img qui appelle une  page php. On retourne au serveur juste à ce moment là. Ta page img.php est exécuté...mais du coup, la session n'est pas "vue" dans la 1ère page. Mais elle eexiste, et si tu raffraichis, ou change de page, évidemment, elle est là.
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016

Du coup c'est un gros inconvénient, si tu veux pas utiliser de window.location.reload.
Mais merci pour ton analyse qui m' a fait creusé un peu +loin.