2010-02-27 4 views
1

J'ai un problème lors de l'utilisation de simplexml_load_file et de vars de session en PHP. Donc, j'ai 2 fichiers PHP, l'un génère du XML et l'autre le lit. Le fichier XML qui génère devrait lire quelques _SESSION $ vars, qui avait été dans l'autre, mais il ne ...

Par exemple, disons que le premier fichier est quelque chose comme:

DOSSIER 1 (lit XML)

<? 
session_start(); 
$_SESSION['test'] = 'test!!!'; 
echo '<b>In file 1</b><br />'; 
echo 'var = '.$_SESSION['test'].'<br />'; // This correctly outputs "test!!!" 
echo '<b>Reading file 2</b><br />'; 
$xml = simplexml_load_file("http://www.someurl.com/2.php"); 
echo 'var = '.$xml['var'];     // This does <b>NOT</b> output "test!!!"... why? 
?> 

2 fICHIER (génère XML)

<? 
header('Content-type:application/xml'); 
session_start(); 

echo '<?xml version="1.0" encoding="utf-8"?>'; 

echo '<test>'; 
echo '<var>'.$_SESSION['test'].'</var>'; 
echo '</test>'; 
?> 

La chose étrange est, si j'ouvrir le fichier directement 2, il ne sait ni lire $ _SESSION [ "test"]

choses que j'ai déjà essayé (et ne fonctionne pas)

  • Ne pas appeler session_start() dans le second fichier

  • Appel session_write_close() avant simplexml_load_file dans le premier fichier

  • Accéder au fichier en utilisant fsockopen au lieu de simplexml_load_file. Cela renvoie aussi une balise vide ... il est donc pas un problème avec simplexml_load_file ...

Je suis un peu d'idées ... quelqu'un peut-il aider?

Merci nico

Répondre

2

D'un point de vue utilisateur/navigateur, la session est passé de la page à la page via un cookie qui contient l'identifiant de session.

Un peu comme ceci:

  • page 1 crée une session et envoyer le cookie contenant son identifiant au navigateur
  • le navigateur demande la page 2 et envoyer le cookie à sa demande
  • le serveur voit ce cookie; il permet de charger la session
  • page 2 est envoyé, à côté du cookie, qui sera réutilisée pour d'autres pages

Ici, vous avez deux pages, mais l'identifiant de session ne se transmet pas le fichier 1 vers le fichier 2 - ce qui signifie que le fichier 2 ne sait même pas qu'il existe une session existante.

En fait, vous avez deux clients, ici:

  • pour le fichier 1, le client est le gars en utilisant son navigateur
    • qui est celui de la session
  • pour le fichier 2, le client est le fichier 1
    • qui n'a pas d'identificateur de session
    • donc, est un autre utilisateur, qui ne partage pas la session du gars en utilisant son navigateur
+1

Merci beaucoup Pascal! Je devais juste passer le session_id et cela a fait l'affaire! La seule chose à faire est que vous devez appeler session_write_close avant de lire le fichier ou que le script va juste expirer (je suppose que les fichiers de session sont protégés par read_protected pendant qu'ils sont utilisés) – nico

+0

@nico: De rien :-) ;;; Oui, comme vous l'avez deviné, il existe un mécanisme de verrouillage en place lorsque vous utilisez des sessions basées sur des fichiers, donc deux scripts PHP différents n'essaient pas de travailler sur la même session en même temps - ce qui serait source de problèmes : lequel de ces scripts serait * "celui qui a raison" * quand il s'agit d'écrire les données de la session? –

Questions connexes