Ordre d'exécution php-html-javascript

Résolu/Fermé
janmar Messages postés 148 Date d'inscription vendredi 17 mai 2013 Statut Membre Dernière intervention 29 août 2015 - 24 mai 2014 à 16:51
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 25 mai 2014 à 16:00
Bonjour,

J'ai un script PHP qui change la variable de session et qui redirige vers une autre page.

Si je comprends bien, mon script est envoyé au serveur, qui traduit en HTML et renvoie la page html à l'utilisateur. A ce moment-là seulement le navigateur exécute JAVASCRIPT.

J'ai un problème : Le changement de la variable session n'est pas toujours pris en compte. On dirait que le JAVASCRIPT s'exécute avant que la variable session ait eu le temps de changer. (quelquefois).

Quelqu'un a-t-il une idée ?

Voici mon script (allégé pour simplification)


<?php
session_start();
header( 'content-type: text/html; charset=utf-8' );
?>
<head>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
</head>
<body>
<?php
$_SESSION['utilisateur'] = "";
?><br>

<script type="text/javascript">
window.parent.location.href="http://www.XXXXXX.fr/accueil3.html";
</script>
</body>

Merci pour le coup de mains.
A voir également:

11 réponses

janmar Messages postés 148 Date d'inscription vendredi 17 mai 2013 Statut Membre Dernière intervention 29 août 2015 3
24 mai 2014 à 19:46
J'ai une autre idée !..
Je vais chercher du côté de la mise en mémoire de la page appelée. Peut-être qu'elle ne se recharge pas tout le temps .... Ça doit tourner autour de ça.
Merci pour tes suggestions et on en reparle après mes investigations.
1
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
24 mai 2014 à 18:57
'lut, les variables de session sont stockées sur le serveur. Le client reçoit juste un cookie contenant une clé représentant un ensemble donné de variables de session qui a été sauvegardé; ce cookie est envoyé avant la page (headers HTTP) donc sera toujours reçu avant l'exécution du JS.
Comme le PHP est interprété intégralement coté serveur avant de l'envoyer, il n'est pas possible que le changement de
$_SESSION['utilisateur']
s'effectue après l'exécution du JS, ce qui fait que ce que tu dis n'est en fait... pas possible.

Qu'est-ce qui te laisse penser ça? Ton JS ne dépend pas de variables de session, donc ça n'a rien a voir avec visiblement... Et comment as-tu "mesuré" la vitesse de changement alors?
0
janmar Messages postés 148 Date d'inscription vendredi 17 mai 2013 Statut Membre Dernière intervention 29 août 2015 3
24 mai 2014 à 19:15
En fait, la redirection me renvoie sur une nouvelle page qui utilise la variable de session, et quelques fois ça marche et d'autres fois la variable n'est pas changée. D'où l'idée de "vitesse" d'exécution.

C'est un peu tiré par les cheveux, je veux bien l'admettre.

D'un autre côté, imaginer qu'un script marche "de temps en temps" n'est pas rationnelle non plus !...
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
24 mai 2014 à 19:22
Bizarre, en effet.
session_start();
est-il bien présent au début de la page de redirection? Ajoute un
print_r($_SESSION);
pour observer le contenu de $_SESSION, ça peut être pratique pour comprendre.
0
-helper- Messages postés 89 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 15 juin 2014 27
25 mai 2014 à 11:33
Je ne sais pas si il y a un lien avec la question....

Mais faire une déclaration de doctype à l'intérieur de la balise
head
.... Ça me semble très farfelu ! Selon moi, le Doctype démarre le document Html...

Tu cherches à faire quoi avec ces redirections et ces sessions (car comme la fait remarqué gravgun en dessous, les variables sessions sont stockées sur le serveur et le cookie est dépendant du domaine visité, par conséquent si tu change de serveur, voir de domaine pendant la redirection.... la session n' "accompagnera pas" le visiteur pendant la redirection) !?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
janmar Messages postés 148 Date d'inscription vendredi 17 mai 2013 Statut Membre Dernière intervention 29 août 2015 3
25 mai 2014 à 12:03
Voilà c'était bien le rechargement de la page qui foirait.
En rajoutant :

<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
<meta http-equiv="Expires" content="0" />
dans le début de ma page, elle se recharge à tous les coups.
La page appelée utilise bien la variable $_SESSION qui a été changée à la page précédente.

Mon raisonnement sur php et JS ne tenait pas debout !.. mea culpa ....

Merci pour vos contributions.
0
janmar Messages postés 148 Date d'inscription vendredi 17 mai 2013 Statut Membre Dernière intervention 29 août 2015 3
25 mai 2014 à 12:08
Un peu d'accord avec toi, mais ça ne change pas grand chose dans le fonctionnement que doctype soit avant ou après le head !...

Je me trompe ou non ?

merci pour ta contribution.
0
-helper- Messages postés 89 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 15 juin 2014 27
Modifié par -helper- le 25/05/2014 à 12:43
Re,

Au départ ce n'était qu'une intuition, qu'une "bonne pratique personnelle", une habitude en quelque sorte...

Mais après quelques recherches :

https://www.w3schools.com/tags/tag_doctype.asp :
The <!DOCTYPE> declaration must be the very first thing in your HTML document, before the <html> tag.

https://fr.wikipedia.org/wiki/Doctype :
Un doctype (contraction de l'anglais "document type") est une instruction obligatoire au début des documents SGML et XML (comme les page web1) spécifiant sa DTD : les règles de sa syntaxe.

Je n'ai pas poussé le vice à essayer une page dans le validateur du W3C (http://validator.w3.org/ mais on pourrait ! lol
0
janmar Messages postés 148 Date d'inscription vendredi 17 mai 2013 Statut Membre Dernière intervention 29 août 2015 3
25 mai 2014 à 14:08
MERCI POUR CETTE CONTRIBUTION.
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 25/05/2014 à 14:27
-helper-, W3Scools est pas mal mais contrairement à la croyance populaire, ce n'est pas une référence. Toutefois ce que tu dis est vrai, c'est décrit dans la spec HTML5, paragraphe 8.1, que le
<!DOCTYPE>
doit se trouver avant l'élément
<html>
.
0
-helper- Messages postés 89 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 15 juin 2014 27
25 mai 2014 à 15:56
Wikipedia encore moins ! J'ai cherché ce que tu as trouvé en vain...

En même temps,... perdre une ligne qui définit les règles d'écriture d'un document au milieu de celui-ci ne me semble pas logique... Que ce soit le standard ou non, j'aurais continuer à mettre mon doctype au début de mes documents !

Je voudrais pas dire... Ok la doc que tu cites est effectivement la référence...
Mais le HTML5 est en cours d'écriture... Draft signifie Brouillon !.... lol (allez... match null) !

Nah !
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
25 mai 2014 à 16:00
0