Bonjour Monsieur
Je répond à chacune de vos question ci-dessous.
Pour quelle raison as-tu besoin de distinguer le premier chargement du
> second ?
Parce que... le premier chargement, par définition, se fait
normalement, en mode habituel par le clilent navigateur, et n'a pas
besoin que Javascript soit activé.
Si l deuxième chargement a lieu, c'est donc que Javascript est activé
sur le navigateur, et dans ce cas-là, il me suffit de savoir, si c'est
le premeir ou le deuxième chargement, pour savoir si ( 1er chargement et
condition remplie ), il faut déclencher le second chargement, ou bien (
2ème chargement de la même page, ou bien condition remplie ( que ce soit
le premier ou le second chargement ) ), à ce moment-là, il ne faut
surtout pas déclencher de nouveau chargement, sinon il y aurait, des
pages chargées plusieurs fois.
La seule chose que j'ai besoin de savoir, quand une page est chargée,
et si c'est le premier chargement de la page ( normal ), ou le deuxième
( par Javascript ).
Par ailleurs, j'alimente une variable $_SESSION['js'] , qui est mise
à jour avec le contenu de la fonction php time() ( donc en secondes ),
lorsqu'il y eu une second chargement.
Lorsqu'une nouvelle page est chargée, je vérifie au premier
chargement, que cette variable de session est affectée, et contient une
valeur au moins égale ou supérieure à : ( time() - 30 ). Dans ce cas, il
n'y a pas besoin de second chargement par Javascript, et je réactualise
de nouveau cette variable de session, avec le fonction time() .
Donc... Le fait de charger une fois ou deux fois la page, ne dépend
que de si la variable de session, peut exister ou non.
Par ailleurs... Lors du premier chargement, cette variable de session
peut ne pas exister du tout, ou ne pas dater de moins de 30 secondes.
Mais... Lors du deuxième chargement ( que je dois détecter donc... ),
cette variable de session doit exister et être à jour, sinon celà
indique que les sessions ne fonctionnent pas, donc que le navigateur,
soit a changé d'adresse ip ( je crois que les sessions dépendent de
l'adresse ip cliente, mais si c'est faux, merci de me le dire ;) ),
soit n'a pas mémorisé la session, donc n'accepte pas les cookies.
Dans ces deux cas, le script php lancé par Javascript, s'aperçoit
que, comme c'est le deuxième chargement, c'est que les cookies ne sont
pas acceptés. Ainsi, il rend une valeur spécifique au script Javascript
qui l'a lancé, et celui-ci déclenche une fenêtre modale avec une
instruction Javascript alert() toute simple, sur laquelle le message
s'affiche, suggérant au visiteur, d'accepter les cookies.
Si l'adresse ip du navigateur client, changeait, est-ce que, s'il
acceptait les cookies, cette variable de session $_SESSION['js'] ,
resterait bien mémorisé, et lisible par le script php lancé en mode
Javascript ?
Ce n'est qu'une partie du problème.
Examinons le cas, où une adresse ip modifiée, permettrait quand même
de mémoriser les variables de session, si les cookies étaient permis par
le navigateur client.
Dans ce car, si Javascript n'était pas activé, le script lancé en
Javascript, ne serait pas lancé, et la variable $_SESSION['js'] ne
serait jamais alimentée ( ou une autre variable de session ). Mais si
Javascript était activé, était activé, ce serait la même chose.
Ainsi, je ne pourrais pas distinguer si Javascript est activé ou si
les cookies sont refusés.
Egalement, je ne pourrais pas me servir d'une autre variable de
session, pour savoir si c'est le premier ou le second chargement,
puisque tout se passerait, du point de vue de cette autre variable de
session, comme si c'était toujours le premier chargement... ;(
Si je faisais celà, ce serait pour le coup, qu'il y aurait des
chargements répétitifs sans limite de la même page ( par Javascript s'il
est activé, et que les cookies sont refusés ).
Et dans ce cas... Même chose. Je n'aurai aucun moyen ( autre que ce
fichier caractéristique de l'adresse ip cliente ), de compter, par
exemple, le nombre consécutif de chargements, ou quoi que ce soit qui
nécessite de savoir que c'est le même navigateur qui recharge les pages.
Quant au fichier caractéristique de l'adresse ip...
Entre le premier et le deuxème chargement, il s'écoule très très peu
de temps, seulement quelques fractions de seconde.
De deux chose l'une : Soit l'adresse ip a changé entre les deux
chargements, soit elle n'a pas changé.
Si elle n'a pas changé, çà marche sans problème.
Si elle a changé, le fichier caractéristique de l'adresse ip,
n'existe pas au deuxième chargement, et l'adresse ip vient de changer il
y a très peu de fractions de seconde.
A ce moment-là, le deuxième chargement,e st interprété comme si
c'était un premier chargement, donc il y a un autre chargement.
Dans ce dernier cas, il est pratiquement impossible, que l'adresse ip
change de nouveau avant ce nouveau chargement, à moins que les adresses
ip ne changent excessivement rapidement, ce qui, vous en conviendrez,
est très peu probable.
Tout au plus, je pourrais avoir dans mon répertoire de ces fichiers
caractéristiques, un certain nombre de fichiers qui resteront, à moins
qu'un autre navigateur d'adresse ip identique se présente, ce qui rendra
possible l'effacement de ce fichier ( et sa recréation ).
J'oubliais de vous dire, que dans le script appelé par Javascript, le
fait que la variable de session $_SESSION['js'] soit trop ancienne (
datant de plus de 30 secondes ), se traduit par un effacement de ce
fichier caractéristique s'il existe.
Ensuite, si ce fichier n'existe pas, il est recréé, et le script rend
une valeur, indiquant au script appelant, qu'il doit recharger la page,
en Javascript.
Quelques cas de figure :
> 1) J'ai déjà une fenêtre ouverte sur ton site depuis mon SeaMonkey, et
> j'ouvre une deuxième fenêtre par Ctrl+N. Est-ce un premier chargement
> ou un second ?
Le deuxième chargement dans la première fenêtre est strictement immédiat.
Il n'y a aucune possibilité humainement parlant, d'aller plus vite
que le script Javascript déclenchant aussi le deuxième chargement sur
votre première fenêtre.
Après, sur la deuxième fenêtre, c'est la même adresse ip, et ( je
crois ), la même variable de session $_SESSION['js'] dans les deux cas,
donc il n'y aura qu'un seul chargement, si vous visitez cette page ( ou
n'importe quelle page du site ) dans la deuxième fenêtre, moins de 30
secondes après avoir visité la première page dans la première fenêtre.
Là, tout dépend de savoir si c'est la même session. Théoriquement
c'est la même, puisque c'est le même navigateur, et la même adresse ip
cliente.
Si ce n'est pas la même session, il y aura de toute façon, lors du
premier chargement d'une page ( quelle que soit la page ), deux
chargements à chaque fois.
> 2) J'ai là encore une première fenêtre ouverte depuis mon SeaMonkey, et
> j'en ouvre une autre depuis Firefox, Opera ou Internet Explorer. Même
> question.
C'est un autre navigateur, donc une autre session, donc il y a deux
chargements, lors de la première page chargée, avec chacun de ces
navigateurs.
Et, quel que soit le navigateur, si vous attendez plus de 30 secondes
avant de changer de page ( en cliquant sur un lien , par exemple ;) ),
la nouvelle page sera chargée aussi deux fois.
Le fait de naviguer avec un navigateur dans mon site avec moins de 30
secondes d'attente sur chaque page, fait que quelle que soit la page
suivante, elle n'est chargée qu'une seule fois. ;)
> 3) Enfin, j'ai une première fenêtre ouverte, je quitte mon navigateur et
> je le relance. Je reviens sur ton site. Même question. La réponse
> change-t-elle selon que j'aille directement sur la page que je venais
> de quitter ou que je repasse par la page d'accueil ?
>
Normalement, un navigateur qui a été arrêté, perds le cookie de
session, ou plutôt, celui-ci n'est plus valide après avoir redémarré le
navigateur, et accédé à mon site une nouvelle fois.
Donc, la variable de sessions $_SESSION['js'] n'a pas été mémorisé,
du point de vue du serveur elle n'existe pas, et donc il y a deux
chargements de la page visitée.
Quand ces deux chargements ont eu lieu ( donc Javascript activé ),
quelle que soit la page suivante, la même ou une autre, n'importe
laquelle, le seul critère est le temps d'attente entre deux visites de page.
Un délai > 30 secondes => deux chargements de la nouvelle page.
Un délai <= 30 secondes => un seul chargement de la nouvelle page,
quelle qu'elle soit.
> Je ne suis pas un spécialiste, mais je crois que seuls les cookies de
> session (temporaires, effacés quand on quitte le navigateur) sont
> nécessaires. Et encore, peut-être même pas. Je pense que ni JavaScript
> ni les cookies persistents ne sont indispensables.
>
Ok ;)
C'est sûr, je n'ai pas besoin de cookies persistents.
La plupart du temps, tous les cookies sont effacés quand le
navigateur s'arrête.
D'autre part, je n'ai aucun besoin de mémoriser des habitudes de mes
visiteurs. Cà, c'est la cerise sur le gâteau... ;)
>
> Le mieux à faire, ÀMHA, c'est de mettre en page d'accueil un texte
> indiquant tous les prérequis, ce texte pouvant être caché si tu peux
> vérifier qu'ils sont tous remplis.
>
Pour le Javascript, c'est ce que je fais.
Pour les cookies, je pense que je n'ai pas encore vu, comment
alimenter une variable à partir d'un script Javascript, je vais me
renseigner à ce sujet.
Dans ce cas, je pourrais, plutôt que d'afficher une bête fenêtre
modale Javscript, afficher en php pratiquement le même message que pour
Javascript, dans un rectangle discret, beaucoup plus discret et facile
d'utilisation qu'une fenêtre modale.
En fait, cette fenêtre modale me pose un gros problème d'ergonomie,
car elle nécessite que le visiteur clique sur le bouton"Ok" de la
fenêtre, pour la faire disparaître... Horrible et les visiteurs vont
fuir... ;(
Vous me donnez, une très très bonne idée, et je suis plus que motivé,
pour trouver comment alimenter une variable php, à partir d'une variable
Javascript.
Je pense que c'est une nécessité absolue pour mon site.
Monsieur, je vous suis très très reconnaissant pour vos conseils, qui
me permettront très certainement, d'améliorer beaucoup mon site, de
façon à le rendre plus convivial pour ses visiteurs. ;)
Merci beaucoup de vos conseils.
Avec gratitude.