Ordre d'exécution php-html-javascript

[Résolu/Fermé]
Signaler
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
-
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
-
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.

11 réponses

Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 271
'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?
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
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 !...
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 271
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.
Messages postés
89
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
15 juin 2014
25
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) !?
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
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.
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
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.
Messages postés
89
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
15 juin 2014
25
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
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
MERCI POUR CETTE CONTRIBUTION.
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 271
-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>
.
Messages postés
89
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
15 juin 2014
25
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 !
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 271