WibiMaster
29Messages postés
10 juin 2009Date d'inscription
30 mars 2010Dernière intervention
11 févr. 2010 à 10:11
Si tu t'adresse à moi, si, je l'appelle réellement deux fois ; en fait, mon appel Ajax me sert à changer le milieu de page, lequel, selon la page importée, a besoin des variables de session.
Du coup, si l'utilisateur n'active pas JavaScript, tout l'index est appelé (header compris), donc mon session_start est en haut de la page d'index. L'inclusion en milieu de page se fait par un include habituel.
Mais si l'utilisateur active JavaScript, l'inclusion en milieu de page se fait par Ajax, du coup l'index n'est pas rafraichi, est apparemment les variables de session doivent être re-appelé dans la page incluse.
Pour faire un petit résumé simplifié, parce que je commence à m'embrouiller :
Mon session_start est en haut de mon Index, ET en haut de mes pages que j'inclue.
Si l'inclusion se fait par Ajax, le premier session_start n'est pas pris en compte (car non-rafraichi), donc pas d'erreur de header, et les variables de sessions sont utilisables.
Si l'inclusion se fait en rechargeant toute la page, alors là oui, ça pose un problème de double-header.
Et si je ne met le session_start QUE en haut de mon Index, alors en cas de rechargement de la page, no problem', mais en cas d'inclusion par Ajax, il ne tient pas compte des variables de session (comme si le session_start n'avait jamais eu lieu).
C'est un peu bancal comme situation.. Mais j'ai finit par trouver (à cause d'un autre problème de caractère accentué ^^) un moyen détourné pour ne pas "cacher" d'erreur et pour que tout soit correct ;
quand je fais mon include en PHP, le fichier inclut fait partie de la page d'index, et du coup les chemins vers d'autres pages (dans cet include) doivent se faire par rapport à la page d'index (en relatif).
Quand je fais l'include en Ajax, la page est traité de manière désolidarisée de la page d'index, du coup le chemin (relatif toujours) vers d'autres pages (pendant le traitement) n'est plus le même (car mes pages incluses sont dans un dossier différent).
Il me suffit donc de tester un chemin vers une page existante avec un file_exist, selon si la réponse est true ou false, je sais si la page est incluse par PHP pur ou par Ajax, et donc mettre mon session_start ou non en conséquence.
Ça parait tordu, mais ca tient en une seule ligne, et ça résout presque tout mes problème liés à Ajax :)
Un exemple concret, pour ceux qui auraient du mal à me suivre :
Pages existantes :
/index.php
/pages/mapage.php
/inc/test.php
mapage.php est appelé par un include dans index.php.
Au début de index.php, j'ai donc la ligne <?php session_start() ?>
Il suffit de mettre en haut de mapage.php :
<?php if(file_exists('../inc/test.php')){session_start()} ?>
Ainsi, si la page est incluse par Ajax, le session_start() est à nouveau appelé. Sinon, pas besoin, le session_start() de l'index suffit.
Je trouve ça étrange, car de mon côté, si je lance ma requête XmlHttpRequest depuis une page ou je suis logé, sur la page php appellée mes variables de SESSION sont bien définies :S C'est pourquoi je te dis que ça doit venir de ton header-> Si tu utilises le requestheader que je t'ai conseillé ça ne marche pas?
( xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); )
++
~• Coin Coin •~
replay.homeunix.com
je sais pas ce qu il c est pasé.. l essentiel c est que ca marche!
et je suis passé en mode asynchrone et ca marche aussi. ca par contre je pense savoir d ou ca vient:
au debut, je voulais faire ca:
function traitement(){mon traitement ici}
function ajax(){
setInterval("Ajax()", 2000 ); //next reload of the page
xhr_object.open("POST", "Ajax.php", false);
xhr_object.send(null);
xhr_object.onreadystatechange = Actualise();
}
mais visiblement on a pas le droit de passer un nom de fontion existant...