session perdue après un window.location [pas encore résolu :( ]

session perdue après un window.location [pas encore résolu :( ] - PHP - Programmation

Marsh Posté le 22-07-2009 à 12:03:45    

Bonjour,
ma question semble banale mais je ne comprends pas le problème :
 
* mon script p1.php passe la main à p2.html via un require("p2.html" );
* mon script p2.html passe la main à p3.php via un window.location = "p3.php";
 
La session créée dans p1.php est perdue dans p3.php. J'utilise pourtant session_start() en début de script...
 
Voyez-vous d'où vient le problème ? Merci beaucoup !


Message édité par suizokukan le 22-07-2009 à 16:15:30

---------------
rule #1 : trust the python
Reply

Marsh Posté le 22-07-2009 à 12:03:45   

Reply

Marsh Posté le 22-07-2009 à 12:07:13    

ton serveur execute le html en tant que php ?
Si p1.php & p3.php ont le session_start(); puis $_SESSION[bla]=1 aucun soucis devrait se poser


Message édité par grosbin le 22-07-2009 à 12:07:34

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 22-07-2009 à 12:12:41    

Merci Grosbin pour ta réponse rapide : que signifie pour toi "ton serveur execute le html en tant que php ?" Comment puis-je le savoir ?
 
Mon fichier p2.html commence par des balises <?php ... ?> puis <html> ... </html>.


---------------
rule #1 : trust the python
Reply

Marsh Posté le 22-07-2009 à 12:19:58    

1) si ton serveur execute le html en tant que php sinon c'est rapé


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 22-07-2009 à 12:37:02    

Un grand merci pour tes explications... même si maintenant tout fonctionne correctement sans que je comprenne bien pourquoi. Comme souvent, le fait de poser la question et de s'imposer une bonne lecture du code suffit à corriger ses erreurs.
 
Merci !


---------------
rule #1 : trust the python
Reply

Marsh Posté le 22-07-2009 à 13:48:46    

C'est juste que du code php dans une page .html c'est pas très réglo...
Si tu balance du code php dans une page, il est préférable de renommer la page en .php
Il y a sans doute certains serveurs qui ne vont même pas interpréter le code php si la page a .html pour extension...
Assez dangereux, surtout si tu donnes tes login de connexion à ta bdd dans cette page.


Message édité par Pascal le nain le 22-07-2009 à 13:56:24
Reply

Marsh Posté le 22-07-2009 à 15:56:55    

Tout d'abord, merci pour vos réponses... je sais que j'abuse de votre gentillesse mais... je viens d'approfondir le problème, et je comprends de moins en moins.
 
En résumé :
* p1.php crée une session et appelle p2.html à l'aide de require("p2.html" );

Code :
  1. <?php
  2. // fichier p1.php
  3. session_start();
  4. $_SESSION['abc'] = 123;  // variable quelconque
  5. echo "m";  // ??? ligne nécessaire (voir plus bas)
  6. require_once($_SERVER['DOCUMENT_ROOT']."/html/p2.html" );
  7. ?>


* p2.html ne fait rien et passe la main à p3.php si le javascript est activé à l'aide de location.window("p3.php" );  
   (p2.html ne contient aucun code PHP et n'affiche rien)
 
* p3.php affiche alors le contenu de $_SESSION.

Code :
  1. <?php
  2. // fichier p3.php
  3. session_start();
  4. print_r( $_SESSION );
  5. ?>


Et voici là où je coince : ma session n'existe plus dans p3.php sauf si j'émets quelques caractères dans p1.php (c'est ma ligne echo "m" ). Pourquoi ? Merci d'avance !


Message édité par suizokukan le 22-07-2009 à 16:17:03

---------------
rule #1 : trust the python
Reply

Marsh Posté le 22-07-2009 à 17:25:19    

Bon, j'ai identifié d'où pouvait venir le problème... même si je ne comprends pas pourquoi :
Dans p2.htm j'avais écrit :

Code :
  1. <base href="http://monsite.fr/" />


Supprimer cette ligne résolvait tous mes problèmes; en cherchant un peu je me suis rendu compte qu'il fallait que je l'écrivisse ainsi :

Code :
  1. <base href="http://www.monsite.fr/" />


 
Si une âme charitable pouvait m'éclairer... En tout cas, merci à ceux qui m'ont lu et/ou répondu !


---------------
rule #1 : trust the python
Reply

Marsh Posté le 22-07-2009 à 17:45:25    

Je crois que tu n'as pas bien saisi le principe des redirections au niveau php et html.
Déjà require() s'utilise en début et uniquement en début de page php pour déclarer par exemple des fonctions.
Si tu veux inclure une page au sein d'une autre, utilise include().
Ensuite, include() et require() servent à inclure, comme leur nom l'indique.
Si tu veux faire une redirection, tu dois utiliser header('Location: tapage.html');
 
Si tu inclues p2.html dans p1.php, tu seras toujours dans p1.php, mais le code de p2.html sera 'copié/collé' dans la page retournée à l'internaute.
Si tu souhaites vraiment que l'utilisateur soit redirigé sur p2.html, utilise header().
 
Je n'ai pas bien saisi ce que tu voulais faire, vu que chaque solution que tu as proposée fait un truc différent...
Précise l'usage final de ce que tu souhaites faire; pour l'instant, je suis dans le vague... ;)


Message édité par Pascal le nain le 23-07-2009 à 09:56:43
Reply

Marsh Posté le 23-07-2009 à 17:55:20    

non, on peur "require" plus loin si on veut ... le début ce sont les cookies et sessions. la différence entre include et require est que si l'include foire, le script continuera à s'exécuter, alors que dans le cas du require ça renverra un "fatal error" et ça s'arrêtera.
 
C'est sûr que je trouve globalement plus "propre" de le faire en début de fichier, mais pour quelques exemples ponctuels (ex. lecture d'un template, ou d'un fichier langue particulier) je pense que ça peut se faire ailleurs dans le code.
 
header, c'est pas *forcément* destiné à la redirection, c'est destiné à envoyer un formatage de document (des entêtes) : un text/html, une image/png, etc.
 
"Location" enverra en fait l'entête et le contenu du fichier appelé  et résultera, au final, à une forme de redirection, mais c'est pas ça à la base.


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 23-07-2009 à 17:55:20   

Reply

Marsh Posté le 23-07-2009 à 17:58:58    

Merci pour ces précisions, ca me servira aussi  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed