Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Je détecte automatiquement si Javascript est activé

53 réponses
Avatar
Jean Francois Ortolo
Bonjour

J'ai apporté une modification à mon site www.pronostics-courses.fr

Maintenant, quand Javascript n'est pas activé, un message s'affiche
en haut de l'écran, pour demander à activer Javascript.

Quand Javascript est activé, et qu'il n'y a eu aucune page de chargée
depuis plus de 30 secondes, le script Javascript inclus dans
pratiquement toutes les pages, efface sur le site, le fichier éventuel
caractéristique de l'adresse ip du visiteur, après avoir reconnu que la
variable de session js date de plus de 30 secondes, ou qu'elle n'existe
pas, puis affecte la variable de session js avec la valeur de la
fonction time() ( qui donne le nombre de secondes depuis le 1er Janvier
1970 je crois ), puis recharge la page, après avoir écrit sur le site,
le fichier caractéristique de l'adresse ip du visiteur.

Ce fichier, me sert essentiellement, à savoir si c'est le premier
chargement, ou le second.

Si le fichier caractéristique existe, et que la variable de session
js date de moins de 30 secondes, cette variable est mis à jour avec la
fonction time(), et il n'y a pas de rechargement de la page.

Celà prouve, que Javascript est activé.

Si le fichier caractéristique n'existe pas, c'est le premier
chargement, donc même chose qu'au début.

Si Javascript n'existe pas, le deuxième script qui crée le fichier
caractéristique, et met à jour la variable de session js, ne s'exécute
pas, et le script php inclus dans les pages du site, détecte que la
variable de session js, n'existe pas, ou est plus ancienne que 30 secondes.

Celà indique que Javascript est désactivé, ainsi le script inclus
dans les pages, affiche le message suggérant d'activer Javascript.

Pour alimenter la variable de session js, et créer le fichier
caractéristique, le script qui le fait, est lancé en Javascript par le
script inclus dans les pages, ce qui fait que ce deuxième script, ne
crée pas le fichier caractéristique, et ne met pas à jour la variable de
session js, si Javascript est désactivé.

Mon site fonctionne, mais le fait que je sois obligé, pour savoir si
c'est le premier chargement ou le deuxième, d'avoir un fichier
caractéristique du visiteur ( par l'adresse ip ), me semble avoir des
limitations, dans le cas ou l'adresse ip cliente, change à chaque
chargement de page.

C'est peut-être le cas du FAI AOL, ou de certaines connexions internet.

Je ne vois pas, comment détecter si c'est le premeir chargement ou le
deuxième, sans ce fichier caractéristique.

Je ne sais pas, si quand l'adresse ip cliente change, il est possible
au navigateur client, de mémoriser un identifiant de session, et si le
serveur, constatant que l'adresse ip change, va pouvoir aussi, méoriser
les variables de session.

Merci beaucoup de me le dire.

J'aurais besoin, que vous me disiez, si mon site fonctionne bien,
même dans ces conditions ( ce qui est peu probable ), et si celà ne
fonctionne pas, quel est son comportement.

Mon site, si Javascript est activé, détecte aussi si les cookies sont
acceptés, et sinon, affiche une fenêtre popup en Javascript, suggérant
d'accepter les cookies.

Pour l'instant, ces deux fonctionnalités ( Javascript et les cookies
), ne sont pas strictement nécessaires au fonctionnement de mon site.

Cependant, dans l'optique de mettre en place un module d'inscription
et d'authentification des visiteurs, pour des fonctionnalités pour
l'instant gratuites ( envoi automatique quotidien de mes pronostics de
quinté ), il y aura nécessité pour que les visiteurs soient authentifiés
que Javascript soit activé,et les cookies permis.

En dehors des spécificités du langage PHP, j'aurais simplement
besoin, que vous me disiez, si mon site fonctionne correctement, dans
toutes les conditions.

Merci beaucoup de vos réponses.

Jean François Ortolo

10 réponses

1 2 3 4 5
Avatar
Jean Francois Ortolo
Rebonjour

Je vous prie de m'excuser.

J'ai fait une erreur dans la description de l'algorithme utilisé pour
détecter si Javascript st activé ou non.

Je corrige ci-dessous, l'erreur.

Bien amicalement.

Jean François Ortolo


Le 19/06/2012 12:15, Jean Francois Ortolo a écrit :


Bonjour

J'ai apporté une modification à mon site www.pronostics-courses.fr

Maintenant, quand Javascript n'est pas activé, un message s'affiche
en haut de l'écran, pour demander à activer Javascript.

Quand Javascript est activé, et qu'il n'y a eu aucune page de chargée
depuis plus de 30 secondes, le script Javascript inclus dans
pratiquement toutes les pages, lance en mode Ajax, un autre script php, qui efface sur le site, le fichier éventuel
caractéristique de l'adresse ip du visiteur, après avoir reconnu que la
variable de session js date de plus de 30 secondes, ou qu'elle n'existe
pas, puis affecte la variable de session js avec la valeur de la
fonction time() ( qui donne le nombre de secondes depuis le 1er Janvier
1970 je crois ), puis recharge la page en Javascript, après avoir écrit sur le site,
le fichier caractéristique de l'adresse ip du visiteur.


Le fichier inclus lançant le script en Javascript, reçoit une
réponse en mode synchrone de ce script, lui indiquant le diagnostic
fait par le script lancé en Javascript.

Le fichier caractéristique, me sert essentiellement, à savoir si c'est le premier
chargement, ou le second.

Si le fichier caractéristique existe, et que la variable de session
js date de moins de 30 secondes, cette variable est mis à jour avec la
fonction time(), et il n'y a pas de rechargement de la page.

Celà prouve, que Javascript est activé.

Si le fichier caractéristique n'existe pas, c'est le premier
chargement, donc même chose qu'au début.

Si Javascript n'existe pas, le script lancé en Javascript, qui crée le fichier
caractéristique, et met à jour la variable de session js, ne s'exécute
pas, et le script php inclus dans les pages du site, détecte que la
variable de session js, n'existe pas, ou est plus ancienne que 30 secondes.

Celà indique que Javascript est désactivé, ainsi le script inclus
dans les pages, affiche le message suggérant d'activer Javascript.

Pour alimenter la variable de session js, et créer le fichier
caractéristique, le script qui le fait, est lancé en Javascript par le
script inclus dans les pages, ce qui fait que ce deuxième script, ne
crée pas le fichier caractéristique, et ne met pas à jour la variable de
session js, si Javascript est désactivé.

Mon site fonctionne, mais le fait que je sois obligé, pour savoir si
c'est le premier chargement ou le deuxième, d'avoir un fichier
caractéristique du visiteur ( par l'adresse ip ), me semble avoir des
limitations, dans le cas ou l'adresse ip cliente, change à chaque
chargement de page.

C'est peut-être le cas du FAI AOL, ou de certaines connexions internet.

Je ne vois pas, comment détecter si c'est le premeir chargement ou le
deuxième, sans ce fichier caractéristique.

Je ne sais pas, si quand l'adresse ip cliente change, il est possible
au navigateur client, de mémoriser un identifiant de session, et si le
serveur, constatant que l'adresse ip change, va pouvoir aussi, méoriser
les variables de session.

Merci beaucoup de me le dire.

J'aurais besoin, que vous me disiez, si mon site fonctionne bien,
même dans ces conditions ( ce qui est peu probable ), et si celà ne
fonctionne pas, quel est son comportement.

Mon site, si Javascript est activé, détecte aussi si les cookies sont
acceptés, et sinon, affiche une fenêtre popup en Javascript, suggérant
d'accepter les cookies.

Pour l'instant, ces deux fonctionnalités ( Javascript et les cookies
), ne sont pas strictement nécessaires au fonctionnement de mon site.

Cependant, dans l'optique de mettre en place un module d'inscription
et d'authentification des visiteurs, pour des fonctionnalités pour
l'instant gratuites ( envoi automatique quotidien de mes pronostics de
quinté ), il y aura nécessité pour que les visiteurs soient authentifiés
que Javascript soit activé,et les cookies permis.

En dehors des spécificités du langage PHP, j'aurais simplement
besoin, que vous me disiez, si mon site fonctionne correctement, dans
toutes les conditions.

Merci beaucoup de vos réponses.

Jean François Ortolo


Avatar
Olivier Miakinen
Bonjour,

Le 19/06/2012 12:15, Jean Francois Ortolo a écrit :

J'ai apporté une modification à mon site www.pronostics-courses.fr

Maintenant, quand Javascript n'est pas activé, un message s'affiche
en haut de l'écran, pour demander à activer Javascript.



Ok. Le site ne fonctionne pas du tout sans JavaScript, même en mode
dégradé ? Dans ce cas, oui, ça me semble bien de prévenir qu'il est
indispensable.

Quand Javascript est activé, et qu'il n'y a eu aucune page de chargée
depuis plus de 30 secondes, le script Javascript inclus dans
pratiquement toutes les pages, efface sur le site, le fichier éventuel
caractéristique de l'adresse ip du visiteur [...]

Ce fichier, me sert essentiellement, à savoir si c'est le premier
chargement, ou le second.



Quitte à imposer que JavaScript soit actif, autant imposer aussi que
les cookies le soient également, ça me semble bien plus pertinent que
l'adresse IP.

En effet, d'une part l'adresse IP peut changer en cours de navigation
web, par exemple si l'utilisateur a une adresse obtenue par DHCP et
que cette adresse change, mais inversement tu peux avoir des centaines
d'utilisateurs différents avec la même adresse IP s'ils passent tous
par le même proxy.

Pour quelle raison as-tu besoin de distinguer le premier chargement du
second ? 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 ?
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.
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 ?

Mon site fonctionne, mais le fait que je sois obligé, pour savoir si
c'est le premier chargement ou le deuxième, d'avoir un fichier
caractéristique du visiteur ( par l'adresse ip ), me semble avoir des
limitations, dans le cas ou l'adresse ip cliente, change à chaque
chargement de page.



Ah oui, tu as vu le problème. Et donc il y a aussi le cas inverse, où
quelqu'un qui n'est jamais venu sur ton site passe par le même proxy web
que quelqu'un qui y est déjà venu. Idem dans le cas d'un réseau familial
avec NAT.

Je ne vois pas, comment détecter si c'est le premier chargement ou le
deuxième, sans ce fichier caractéristique.



Commence donc par définir ce que tu veux dire par « premier » ou
« deuxième » chargement (cf. mes trois cas de figure plus haut).

Généralement, cette notion se gère par un cookie, et dans ce cas le
« deuxième chargement » signifie : je suis déjà venu avec le même
navigateur, lequel accepte les cookies pour ce site.

J'aurais besoin, que vous me disiez, si mon site fonctionne bien,
même dans ces conditions ( ce qui est peu probable ), et si celà ne
fonctionne pas, quel est son comportement.



Je ne peux pas le tester en ce moment. Je suis derrière un proxy (avec
donc la même adresse IP que tous mes collègues) et ce proxy refuse ton
site pour la raison qu'il est dans la catégorie « jeux de hasard ».

Mon site, si Javascript est activé, détecte aussi si les cookies sont
acceptés,



Oh, donc tu as aussi pensé aux cookies.

et sinon, affiche une fenêtre popup en Javascript, suggérant
d'accepter les cookies.



Attention : mes navigateurs ont JavaScript activé mais ils refusent les
popups. Cela dit, le terme que tu utilises est peut-être impropre, je ne
peux pas le savoir (certaines pages simulent une popup qui n'en est pas
une).

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 l'instant, ces deux fonctionnalités ( Javascript et les cookies
), ne sont pas strictement nécessaires au fonctionnement de mon site.

Cependant, dans l'optique de mettre en place un module d'inscription
et d'authentification des visiteurs, pour des fonctionnalités pour
l'instant gratuites ( envoi automatique quotidien de mes pronostics de
quinté ), il y aura nécessité pour que les visiteurs soient authentifiés
que Javascript soit activé,et les cookies permis.



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.


Cordialement,
--
Olivier Miakinen
Avatar
Jean Francois Ortolo
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.

Bien amicalement.

Jean François Ortolo
Avatar
Olivier Miakinen
Bonjour,

[Aparté :
J'ai l'habitude de tutoyer sur tous les groupes, alors que tu as
l'habitude de vouvoyer tout le monde. Si la dissymétrie ne te gêne
pas, continuons comme ça. Sinon, je veux bien faire un effort et
revenir au « vous » (je le fais pour une personne qui me l'a demandé
expressément) mais il m'arrive d'oublier.
]

Le 21/06/2012 19:30, Jean Francois Ortolo a écrit :

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 ) ),



Si la question est juste de différencier la requête utilisateur de celle
faite par JavaScript, alors c'est très simple : il suffit de passer un
paramètre différent quand c'est JavaScript qui fait la requête.

Par exemple, l'utilisateur appelle :
http://www.example.com/ma/page/qui/est/belle

Et JavaScript :
http://www.example.com/ma/page/qui/est/belle?idjavascript=untruc

Tu peux même t'assurer de la correspondance entre les deux requêtes si
« untruc » est une très longue chaîne aléatoire générée par le serveur
et mise dans le code JavaScript lors de la réponse à la 1re requête.

Cela dit, il y a peut-être encore plus simple, mais en tout cas tu
n'as rien besoin de bidouiller avec l'adresse IP.

à ce moment-là, il ne faut
surtout pas déclencher de nouveau chargement, sinon il y aurait, des
pages chargées plusieurs fois.



Soit dit en passant, la première chose à faire serait de t'arranger pour
qu'il ne soit jamais grave qu'une page soit chargée plusieurs fois.
Si je me rappelle bien, c'est John Gallet sur fr.comp.lang.php ou sur
fr.comp.applications.sgbd qui, pour commencer, critiquait très fort
l'utilisation de l'auto-incrément dans les bases de données suite à
une requête web (mais comme je n'y connais pas grand chose je peux me
tromper).

La seule chose que j'ai besoin de savoir, quand une page est chargée,
[est] si c'est le premier chargement de la page ( normal ), ou le deuxième
( par Javascript ).



En principe, tu ne devrais pas avoir besoin de le savoir. Tu que tu
dois savoir, c'est s'il s'agit d'une requête faite sans paramètres
ou bien s'il y a des paramètres à prendre en compte.

[explications qui me passent un peu au dessus de la tête]



Je laisse répondre les spécialistes des sessions, ce qui n'est pas
mon cas.

[...]

Ainsi, je ne pourrais pas distinguer si Javascript est activé ou si
les cookies sont refusés.



Je serais bien étonné que ces deux choses ne soient pas déjà traitées
dans la littérature.

http://www.google.fr/search?q=comment+tester+si+JavaScript+est+actif
http://www.google.fr/search?q=comment+tester+si+les+cookies+sont+actifs

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.



Euh...
1er appel : http://www.example.com/ma/page/qui/est/belle
2nd appel : http://www.example.com/ma/page/qui/est/belle?count=2
3e appel : http://www.example.com/ma/page/qui/est/belle?count=3
...

Avec dans le code PHP (code approximatif, tests de cohérence non mis) :
$count = isset($_REQUEST["count"]) ? $_REQUEST["count"] : 1;
$count++;
echo "<a href='$url?count=$count'>";

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.



Ça, tu ne peux pas le savoir. Il suffit d'un changement de route entre
les deux, par exemple, ou tout simplement du passage par un lien très
lent.

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.



Supposons qu'un tel évènement n'ait qu'une chance sur un million de
se produire. Supposons maintenant que tu aies cent clients par jour,
et que ceux-ci fassent en moyenne cent requêtes par jour. Au bout de
cent jours, tu auras eu un million de requêtes. L'évènement qui n'a
qu'une chance sur un million de se produire devient du coup beaucoup
moins improbable, n'est-ce pas ?

De toute manière, ta méthode me semble excessivement compliquée alors
qu'il te suffit, dans chaque réponse à une requête, de mettre ce qu'il
faut pour que la requête suivante soit parfaitement déterminée comme
étant une « suite ». Pas besoin de contrôle d'adresse IP, pas besoin
de gestion du temps, juste un id de session et un numéro d'ordre.

[...]

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.



Ah ? Et si j'ouvre deux fenêtres en même temps vers le site ?

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.



Soit dit en passant, je n'ai toujours pas compris pourquoi il fallait
deux chargements. Le serveur ne peut pas envoyer toutes les infos
requises en une seule fois ? Ou alors c'est pour tester que JavaScript
fonctionne ? Mais dans ce dernier cas il doit y avoir un moyen plus
simple.

> 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. ;)



Et le résultat est le même, selon qu'une *nouvelle* page soit chargée
une fois (avant 30 secondes) ou deux fois ? C'est pour punir les
visiteurs lents ou ayant une connection peu rapide ?

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.



Ça me semble vraiment trop bizarre, je n'arrive pas à comprendre la
raison profonde qui peut te pousser à faire cela.

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.



JavaScript :
if (il n'y a pas encore de '?')
url = url + '?var=valeur';
else
url = url + '&var=valeur';
... puis appel de l'url qui contient du code PHP.

PHP :
$_REQUEST['var']


Cordialement,
--
Olivier Miakinen
Avatar
Tonton Th
On 06/19/2012 12:15 PM, Jean Francois Ortolo wrote:

caractéristique de l'adresse ip du visiteur,



Et si le visiteur change d'IP ?

--

Nous vivons dans un monde étrange/
http://foo.bar.quux.over-blog.com/
Avatar
Jean Francois Ortolo
Le 22/06/2012 12:33, Olivier Miakinen a écrit :
Bonjour,

[Aparté :
J'ai l'habitude de tutoyer sur tous les groupes, alors que tu as
l'habitude de vouvoyer tout le monde. Si la dissymétrie ne te gêne
pas, continuons comme ça. Sinon, je veux bien faire un effort et
revenir au « vous » (je le fais pour une personne qui me l'a demandé
expressément) mais il m'arrive d'oublier.
]





Bonjour Monsieur

Je vous prie de bien vouloir m'excuser de vous vouvoyer. ;)

C'est un signe d'amitié.

Voilà, j'ai constaté, que de mon point de vue de programmeur PHP et
HTML, j'étais dans l'impossibilité de savoir, avec mon algorithme, si le
fait que la variable de session $_SESSION['js'] n'était pas alimenté
correctement, est du au fait, soit que Javascript n'est pas activé, soit
les Cookies refusés, soit les deux.

Cependant, je pourrais faire ce distinguo ( du moins ne pas avoir à
faire de fenêtre modale gênante pour les utilisateurs, et simplement les
avertir du fait exact, en changeant en PHP l'intitulé du message affiché
sur l'écarn ( mais pas de fenêtre modale par alert() en Javascript ) ),
si et seulement si, je savais comemnt affeectr une variable PHP, à
partir d'une variable Javascript.

Vous m'avez dit, pour celà : Lancer en Javascript un script prenant
en paramètre GET cette variable, et récupérer le résultat rendu par ce
script, en PHP.

Cependant, je n'arrive pas à savoir, comment ce serait possible, sur
le plan de la programmation, de faire celà. Particulièrement le type de
séquencement à appliquer, et comment disposer les instructions.

Je peux effectivement, en PHP utiliser les instructions de type
curl_*() pour gérer le lancement et la réception des données d'un script
PHP.

Il me semble, que quand la portion de code qui lance un script, est
aussi celui qui en reçoit les résultats.

Je suis dans le noir.

Jje ne vois pas du tout, quelle est la logique de séquencement de ces
opérations ( en javascript, puis en PHP ).

Je vous serais très reconnaissant, si vous pouviez me donner plus de
précisions si le procédé à mettre en oeuvre pour celà.

Merci beaucoup pour vos réponses.

Bien amicalement.

Jean François Ortolo
Avatar
Olivier Miakinen
Le 24/06/2012 11:11, Jean Francois Ortolo a écrit :

Je vous prie de bien vouloir m'excuser de vous vouvoyer. ;)



Tu es tout excusé, si de ton côté tu me pardonnes de te tutoyer !

Voilà, j'ai constaté, que de mon point de vue de programmeur PHP et
HTML, j'étais dans l'impossibilité de savoir, avec mon algorithme, si le
fait que la variable de session $_SESSION['js'] n'était pas alimenté
correctement, est du au fait, soit que Javascript n'est pas activé, soit
les Cookies refusés, soit les deux.



D'accord. Alors vu que les cookies n'ont pas besoin de JavaScript, je
suppose que tu peux utiliser la fonction setcookie() et la variable
$_COOKIE pour tester ça.

Voir par exemple <http://php.net/manual/fr/function.setcookie.php>,
et aussi les liens listés au bas de cette page (« Voir aussi »).

Et donc, si le cookie mis par setcookie() est correct mais que celui
mis par JavaScript ne l'est pas, tu sauras que JavaScript est désactivé
alors que les cookies ne sont pas refusés.

[...]

Vous m'avez dit, pour celà : Lancer en Javascript un script prenant
en paramètre GET cette variable, et récupérer le résultat rendu par ce
script, en PHP.



Non, c'est *toi* qui as dit que la seconde requête était faite par
JavaScript. J'ai juste dit que dans ce cas il suffit de demander à
JavaScript de faire une requête différente de celle faite par le
visiteur.

Cependant, je n'arrive pas à savoir, comment ce serait possible, sur
le plan de la programmation, de faire celà. Particulièrement le type de
séquencement à appliquer, et comment disposer les instructions.

Je peux effectivement, en PHP utiliser les instructions de type
curl_*() pour gérer le lancement et la réception des données d'un script
PHP.



Ouh là ! Tu as plusieurs serveurs PHP qui s'appellent les uns les
autres ? Si oui, tu pourrais être amené à faire du Curl pour qu'un
script PHP sur un serveur lance à distance un programme PHP sur un
autre serveur. Sinon, un simple appel de fonction est plus que
suffisant dans l'immense majorité des cas.

Il me semble, que quand la portion de code qui lance un script, est
aussi celui qui en reçoit les résultats.

Je suis dans le noir.

Jje ne vois pas du tout, quelle est la logique de séquencement de ces
opérations ( en javascript, puis en PHP ).



Comme je ne connais pas la profondeur de tes interrogations et d'une
éventuelle confusion, je t'invite d'abord à lire ceci :
<http://faqfclphp.free.fr/#rub2.3>.

Tu dois comprendre que les programmes PHP et JavaScript ne tournent
*jamais* en même temps sur la même tâche.

En premier lieu, il y a une requête HTTP qui est faite du client au
serveur. Lors de la transmission de cette requête, ni JavaScript ni
PHP ne tournent.

Quand le serveur reçoit la requête, il construit la réponse. Cette
construction de réponse peut se faire en PHP, mais pendant ce temps
là JavaScript ne fait rien. Même si le PHP écrit du code JavaScript,
ce code n'est pas exécuté du tout.

Ensuite, la réponse est envoyée du serveur au client. À ce moment là,
PHP a complètement fini de travailler, le programme s'est arrêté et
toute sa mémoire a été libérée. Pourtant JavaScript n'est pas encore
lancé.

À présent, le HTML est arrivé sur le client. Si ce code HTML contient
du JavaScript, le client peut l'exécuter. Éventuellement, ce code
JavaScript peut construire une *nouvelle* requête HTTP, qui lancera
un *nouveau* script PHP lors d'un *nouveau* lancement du programme
PHP sur le serveur.


Cordialement,
--
Olivier Miakinen
Avatar
Jean Francois Ortolo
Bonjour Monsieur ;)

Grâce à vous et votre lien, j'ai la réponse à ma question.

Celà signifie en fait, faire un refresh de la page, donc relancer
cete même page en Javascript ( c'est facile ), avec en paramètre post (
de préférence post, pour éviter d'interférer avec les autres paramètres
de la page) la valeur Javascript souhaitée.

En effet, je fais de l'urlrewriting pour les pages de mon site
www.pronostics-courses.fr ;)

Celà fait, qu'il n'y aura pas de problème, pour relancer la page en
mode post, puisque les autres paramètres, sont intégrés à l'url de la page.

En fait, faire un refresh de la page, est précisément ce que je fais
déjà, en rechargeant la page si Javascript est activé. ;)

Donc, à cet endroit du code Javascript ( relancement de cette page ),
il me suffit d'intégrer en paramètre post, la valeur qui indiquera à ce
même script php, si les cookies sont acceptés ou refusés.

Ouf, merci beaucoup, vous avez trouvé la réponse à mes questions. ;)

D'autre part, j'ai changé d'avis pour ce qui est de la mémorisation
des données, nécessaires au bon fonctionnement de cet algorithme. ;)


Pour la suite, le traitement php suivant ( l'algorithme ), est fait
par un script session_js.php, lancé par Javascript en mode synchrone par
la page chargée par le visiteur.

Au lieu d'écrire des fichiers me servant de repère si c'est le
premier chargement de la page ou le deuxième ( par Javascript ),je vais
alimenter une table MySQL du type :

CONNEXION(MAINTENANT FLOAT KEY NOT NULL DEFAULT 0,
CODE INTEGER NOT NULL KEY DEFAULT 0,
IP_ADDRESS VARCHAR(100) KEY NOT NULL DEFAULT '';


Le critère pour savoir si le visiteur a déjà chargé une page (
n'importe laquelle ), est le suivant :

A chaque requête HTTP d'un visiteur, on a son adresse ip, dont on ne
garde que la partie significative, qui ne tient pas compte des éléments
variables d'une adresse ip éventuellement variable.

Merci beaucoup, si vous pouviez m'indiquer, dans un contexte
habituel, soi en ip4, soit en ip6, avec une connexion variable de type :
téléphone mobile, ou bien aol, ou bien FAI sans adresse ip fixe,
etc... comment sélectionner la partie fixe de l'adresse ip ( le
commencement de l'adresse, en tenant compte de combien de points,
suivant que l'adresse est en ip4 ou en ip6 ). ;)


Donc à chaque requête HTTP, on lit la valeur de la variable de
session éventuelle $_SESSION['CODE']

Si elle est alimentée, et existe dans la table CONNEXION, il n'y a
pas de refresh, car session_js.php rend 'OK' à la page appelante.

Dans tous les cas, le script session_js.php alimente une variable
$_SESSION['js'] = time();

Si cette variable n'existe pas dans la page, c'est que Javascript est
désactivé et/ou les Cookies refusés. Mais si Javascript est désactivé,
il est impossible de savoir lequel des deux, ou les deux.

Dans ce cas, le message affiché sur la page appelante, indique
simplement qu'il faut activer Javascript, et accepter les Cookies. ( A
l'impossible nul n'est tenu ;) )


Si $_SESSION['CODE'] n'existe pas dans CONNEXION, ou n'est pas
alimentée, on regarde dans la table CONNEXION, si la partie
significative de l'adresse ip cliente, existe déjà dans la table, et
date de moins de $delai_max microsecondes.

$delai_max est le nombre maximal de microsecondes, que la page met
avant de se rafraîchir, dans le cas où il y a eu un refresh.

Si cette donnée de l'adresse ip cliente existe dans ces conditions,
c'est que c'est le deuxième chargement ( i y a déjà eu un refresh ).

Là, il y a deux cas :

Si $_SESSION['CODE'] est alimentée ( valeur non existante dans
CONNEXION ), les cookies sont acceptés, et Javascript activé, donc on ne
fait rien de plus ( session_js.php rend 'OK', et le fait qu'il n'y a pas
de paramètre POST $NO_COOK à la page appelante, lui indique que les
cookies sont acceptés.

Si $_SESSION['CODE'] n'existe pas, c'est que les cookies sont
interdits, donc session_js.php rend 'NO_COOK' au script appelant, qui
recharge la page en Javascript ( deuxième refresh ), en passant à la
page, en mode POST, un paramètre $NO_COOK= true;

Si ce paramètre de la page existe et a déjà cette valeur, on ne fait
pas le traitement ci-dessus, donc plus de refresh, Javascript activé, et
les Cookies sont refusés.

2b-
Si cette donnée de l'adresse ip cliente n'existe pas dans ces
conditions, ( c'est le script session_js.php qui fait tout le traitement
MySQL ), c'est qu'il n'y a pas eu de refresh de la page.

Donc, session_js.php , génère un code aléatoire CODE, avec la
fonction crypt($_SERVER['REMOTE_ADDRESS']), ou une autre fonction plus
efficace, après avoir fait un srand(time()); , pour réinitialiser
d'uneamnière élaatoire, le séquencement de la fonction cryp().

Il met cette variable CODE en session : $_SESSION['CODE'] = $CODE;

Puis il enregistre dans la table CONNEXION, ce CODE, la partie
significative de l'adresse ip dans IP_ADDRESS, puis la valeur de
microtime() dans MAINTENANT.

Comme le visiteur n'est jamais passé sur la page, session_js.php rend
'BAD' à page apelant, qui fait un refresh.

En plus de çà, à la fin du script session_js.php , celui-ci efface
systématiquement de la table CONNEXION, les enregistrements plus vieux
que le temps maximal, qu'un visiteur peut passer sur une seule page,
avant de changer de page, ou de la recharger manuellement.

Le fait qu'il puisse y avoir deux refresh, ne peut se produire, que
si Javscript est activé, et les Cookies refusés.

Je ne garde pas les adresses ip entières, seulement la partie fixe

Le critère pour savoir si Javascript n'est pas activé, est si
$_SESSION['js'] n'existe pas, et il n'y a pas de paramètre $NO_COOK.

Dans ce cas,pas de refresh.

Si $NO_COOK existe, c'est que Javascript est activé, et les Cookies
refusés.

Dans ce cas, deux refresh dans tous les cas. ( trois chargements de
la même page ).

Si $NO_COOK n'existe pas, et $_SESSION['js'] existe, Javascript est
activé et les Cookies acceptés.

Dans ce cas, un refresh, seulement si $_SESSION['js'] date de plus du
temps maximal théorique que met un visiteur, avant de recharger une page
manuellement.

Normalement, il n'y a pas de refresh, après un seul refresh initial.

Si les Cookies sont refusés, et Javascript activé, il y a
obligatoirement deux refresh dans tous les cas, mais hélas, je ne crois
pas que je puisse faire autrement, pour distinguer les cas :

Les Cookies refusés, et Javascript activé, ou Javascript désactivé.


Que pensez -vous de cet algorithme ? ;)

Merci beaucoup de votre réponse.

Bien amicalement.

Jean François Ortolo
Avatar
Jean Francois Ortolo
Rebonjour Monsieur

J'ai pensé à quelque chose, pour savoir si les cookies sont acceptés
ou non.

Il me suffirait simplement, dans la page appelante, d'alimenter une
autre variable de session, et de vérifier si elle est alimentée.

Dans tous les cas si Javascript n'est pas activé, il n'y a pas de
refresh, donc je n'aurais pas le moyen, dans la page appelante, de faire
cette variable de session, puis de vérifier qu'elle existe, s'il n'y a
pas de refreh de la page.

Merci de me le confirmer.

Si c'est possible de savoir immédiatement après avoir alimenté une
variable de session, qu'elle existe, celà me soulagerait, car je saurais
tout de suite si les cookies sont refusés, même si Javascript est désactivé.

Et puis, que ce soit le cas ou non, celà me permettra, de ne plus
avoir au maximum, qu'un seul refresh au lieu de deux, et ceci, dans la
plus mauvaise configuration possible, où le visiteur attendrait plus que
le temps maximal admis, pour recharger une page manuellement.

Mais si c'est possible de savoir ( voir ci-dessus ), alors je pourrai
facilement, savoir indépendamment l'un de l'autre, si Javscript est
activé ou non,et si les Cookies sont acceptés ou non.

Ce serait l'idéal.

Merci beaucoup de votre réponse.

Bien amicalement.

Jean François Ortolo




Le 25/06/2012 10:34, Jean Francois Ortolo a écrit :

Bonjour Monsieur ;)

Grâce à vous et votre lien, j'ai la réponse à ma question.

Celà signifie en fait, faire un refresh de la page, donc relancer
cete même page en Javascript ( c'est facile ), avec en paramètre post (
de préférence post, pour éviter d'interférer avec les autres paramètres
de la page) la valeur Javascript souhaitée.

En effet, je fais de l'urlrewriting pour les pages de mon site
www.pronostics-courses.fr ;)

Celà fait, qu'il n'y aura pas de problème, pour relancer la page en
mode post, puisque les autres paramètres, sont intégrés à l'url de la page.

En fait, faire un refresh de la page, est précisément ce que je fais
déjà, en rechargeant la page si Javascript est activé. ;)

Donc, à cet endroit du code Javascript ( relancement de cette page ),
il me suffit d'intégrer en paramètre post, la valeur qui indiquera à ce
même script php, si les cookies sont acceptés ou refusés.

Ouf, merci beaucoup, vous avez trouvé la réponse à mes questions. ;)

D'autre part, j'ai changé d'avis pour ce qui est de la mémorisation
des données, nécessaires au bon fonctionnement de cet algorithme. ;)


Pour la suite, le traitement php suivant ( l'algorithme ), est fait
par un script session_js.php, lancé par Javascript en mode synchrone par
la page chargée par le visiteur.

Au lieu d'écrire des fichiers me servant de repère si c'est le
premier chargement de la page ou le deuxième ( par Javascript ),je vais
alimenter une table MySQL du type :

CONNEXION(MAINTENANT FLOAT KEY NOT NULL DEFAULT 0,
CODE INTEGER NOT NULL KEY DEFAULT 0,
IP_ADDRESS VARCHAR(100) KEY NOT NULL DEFAULT '';


Le critère pour savoir si le visiteur a déjà chargé une page (
n'importe laquelle ), est le suivant :

A chaque requête HTTP d'un visiteur, on a son adresse ip, dont on ne
garde que la partie significative, qui ne tient pas compte des éléments
variables d'une adresse ip éventuellement variable.

Merci beaucoup, si vous pouviez m'indiquer, dans un contexte
habituel, soi en ip4, soit en ip6, avec une connexion variable de type :
téléphone mobile, ou bien aol, ou bien FAI sans adresse ip fixe,
etc... comment sélectionner la partie fixe de l'adresse ip ( le
commencement de l'adresse, en tenant compte de combien de points,
suivant que l'adresse est en ip4 ou en ip6 ). ;)


Donc à chaque requête HTTP, on lit la valeur de la variable de
session éventuelle $_SESSION['CODE']

Si elle est alimentée, et existe dans la table CONNEXION, il n'y a
pas de refresh, car session_js.php rend 'OK' à la page appelante.

Dans tous les cas, le script session_js.php alimente une variable
$_SESSION['js'] = time();

Si cette variable n'existe pas dans la page, c'est que Javascript est
désactivé et/ou les Cookies refusés. Mais si Javascript est désactivé,
il est impossible de savoir lequel des deux, ou les deux.

Dans ce cas, le message affiché sur la page appelante, indique
simplement qu'il faut activer Javascript, et accepter les Cookies. ( A
l'impossible nul n'est tenu ;) )


Si $_SESSION['CODE'] n'existe pas dans CONNEXION, ou n'est pas
alimentée, on regarde dans la table CONNEXION, si la partie
significative de l'adresse ip cliente, existe déjà dans la table, et
date de moins de $delai_max microsecondes.

$delai_max est le nombre maximal de microsecondes, que la page met
avant de se rafraîchir, dans le cas où il y a eu un refresh.

Si cette donnée de l'adresse ip cliente existe dans ces conditions,
c'est que c'est le deuxième chargement ( i y a déjà eu un refresh ).

Là, il y a deux cas :

Si $_SESSION['CODE'] est alimentée ( valeur non existante dans
CONNEXION ), les cookies sont acceptés, et Javascript activé, donc on ne
fait rien de plus ( session_js.php rend 'OK', et le fait qu'il n'y a pas
de paramètre POST $NO_COOK à la page appelante, lui indique que les
cookies sont acceptés.

Si $_SESSION['CODE'] n'existe pas, c'est que les cookies sont
interdits, donc session_js.php rend 'NO_COOK' au script appelant, qui
recharge la page en Javascript ( deuxième refresh ), en passant à la
page, en mode POST, un paramètre $NO_COOK= true;

Si ce paramètre de la page existe et a déjà cette valeur, on ne fait
pas le traitement ci-dessus, donc plus de refresh, Javascript activé, et
les Cookies sont refusés.

2b-
Si cette donnée de l'adresse ip cliente n'existe pas dans ces
conditions, ( c'est le script session_js.php qui fait tout le traitement
MySQL ), c'est qu'il n'y a pas eu de refresh de la page.

Donc, session_js.php , génère un code aléatoire CODE, avec la
fonction crypt($_SERVER['REMOTE_ADDRESS']), ou une autre fonction plus
efficace, après avoir fait un srand(time()); , pour réinitialiser
d'uneamnière élaatoire, le séquencement de la fonction cryp().

Il met cette variable CODE en session : $_SESSION['CODE'] = $CODE;

Puis il enregistre dans la table CONNEXION, ce CODE, la partie
significative de l'adresse ip dans IP_ADDRESS, puis la valeur de
microtime() dans MAINTENANT.

Comme le visiteur n'est jamais passé sur la page, session_js.php rend
'BAD' à page apelant, qui fait un refresh.

En plus de çà, à la fin du script session_js.php , celui-ci efface
systématiquement de la table CONNEXION, les enregistrements plus vieux
que le temps maximal, qu'un visiteur peut passer sur une seule page,
avant de changer de page, ou de la recharger manuellement.

Le fait qu'il puisse y avoir deux refresh, ne peut se produire, que
si Javscript est activé, et les Cookies refusés.

Je ne garde pas les adresses ip entières, seulement la partie fixe

Le critère pour savoir si Javascript n'est pas activé, est si
$_SESSION['js'] n'existe pas, et il n'y a pas de paramètre $NO_COOK.

Dans ce cas,pas de refresh.

Si $NO_COOK existe, c'est que Javascript est activé, et les Cookies
refusés.

Dans ce cas, deux refresh dans tous les cas. ( trois chargements de
la même page ).

Si $NO_COOK n'existe pas, et $_SESSION['js'] existe, Javascript est
activé et les Cookies acceptés.

Dans ce cas, un refresh, seulement si $_SESSION['js'] date de plus du
temps maximal théorique que met un visiteur, avant de recharger une page
manuellement.

Normalement, il n'y a pas de refresh, après un seul refresh initial.

Si les Cookies sont refusés, et Javascript activé, il y a
obligatoirement deux refresh dans tous les cas, mais hélas, je ne crois
pas que je puisse faire autrement, pour distinguer les cas :

Les Cookies refusés, et Javascript activé, ou Javascript désactivé.


Que pensez -vous de cet algorithme ? ;)

Merci beaucoup de votre réponse.

Bien amicalement.

Jean François Ortolo


Avatar
Olivier Miakinen
Bonjour,

Le 25/06/2012 10:34, Jean Francois Ortolo a écrit :

Grâce à vous et votre lien, j'ai la réponse à ma question.



Je ne sais pas lequel des deux liens, mais je suis content d'avoir
pu te rendre service.

[...]

A chaque requête HTTP d'un visiteur, on a son adresse ip, dont on ne
garde que la partie significative, qui ne tient pas compte des éléments
variables d'une adresse ip éventuellement variable.



???

Qu'est-ce qu'une adresse ip « éventuellement variable » ? Une adresse
dont le FAI ne garantit pas qu'elle soit fixe ? Et qu'est-ce que cette
« partie significative » ?

Merci beaucoup, si vous pouviez m'indiquer, dans un contexte
habituel, soi en ip4, soit en ip6, avec une connexion variable de type :
téléphone mobile, ou bien aol, ou bien FAI sans adresse ip fixe,
etc... comment sélectionner la partie fixe de l'adresse ip ( le
commencement de l'adresse, en tenant compte de combien de points,
suivant que l'adresse est en ip4 ou en ip6 ). ;)



Non, je ne le peux pas. Ou plutôt si : tu peux considérer que tu as
0 bits fixes, soit 32 bits variables en IPv4 et 128 bits variables
en IPv6.

Quoique... en IPv6, si tu n'as aucun client utilisant une adresse
privée ou un adresse local de lien, tu peux considérer que les
trois premiers bits sont vraiment fixes, c.-à-d. les adresses entre
2000:0:0:0:0:0:0:0 et 3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff.

Mais encore une fois, je ne vois pas l'intérêt de tenir compte
d'autre chose que des données utiles pour l'échange : url,
paramètres (de type get ou de type post) ou infos de session.
Ce d'autant plus que, comme on l'a déjà signalé, un visiteur
peut avoir plusieurs adresses IP (successivement ou même
simultanément), et plusieurs visiteurs peuvent avoir la même
adresse IP simultanément.

Par exemple, en ce moment, la machine sur laquelle je suis
répond à deux adresses IPv4 et à cinq adresses IPv6, mais
si j'arrivais à joindre ton serveur tu la verrais avec une
troisième adresse IPv4, la même que pour chacun de mes
collègues.

[...]

Que pensez -vous de cet algorithme ? ;)



Rien, car personnellement je n'ai jamais fait que des pages web
beaucoup plus simples, sans sessions ni cookies. J'espère n'être
pas le seul à suivre cette discussion car d'autres sont certainement
beaucoup plus au fait que moi de ces techniques.

Si au moins j'ai pu te convaincre d'abandonner le stockage d'adresse
ip qui ne peut t'amener que des problèmes, alors j'estimerai vraiment
t'avoir aidé. ;-)

Cordialement,
--
Olivier Miakinen
1 2 3 4 5