OVH Cloud OVH Cloud

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

2 3 4 5 6
Avatar
Jean Francois Ortolo
Le 29/06/2012 07:03, Tonton Th a écrit :
On 06/28/2012 04:26 PM, Jean Francois Ortolo wrote:

S'il y avait des problèmes causés par des changements d'adresses ip,
je le saurais, car il y aurait des adresses ressemblantes qui se
suivent, en ordre chronologique.



Le répartiteur de charge me bascule de Free à Orange entre
deux pages, il se passe qui quoi ?






Bonjour Monsieur

Le temps d'attente théorique, après lequel il y a prise en compte de
la modification du Javascript ( inactif -> actif, ou actif -> inactif )
pour afficher le message le cas échéant, est de 30 secondes actuellement.

.Quand Javascript est actif, la prise en compte pour le message ( ou pas
de message ), du cas où il y a une modification de la configuration des
Cookies ( acceptés -> refusés, ou refusés -> acceptés ), est
théoriquement très très courte, voire instantanée.

Je rappelle, que le but de mes manip, est de détecter
automatiquement, si Javascript est désactivé ou non, et/ou les Cookies
acceptés ou non.

Celà, pour afficher un message en haut de l'écran, suggérant
d'activer Javascript, et permettre les Cookies.

Dans ces conditions, vous pouvez faire tous les test que vous voulez,
et me dire s'il y a des cas, où le message s'affiche là où il ne devrait
pas s'afficher.

Qu'il y ait, durant 30 secondes maximum, des cas où le message ne
s'affiche pas, alors qu'il devrait s'afficher ( Javascript surtout,
et/ou les Cookies, interdits ), c'est normal : Celà vient du fait que le
visiteur vient de modifier sa configuration pour Javascript et/ou les
Cookies.

Par contre, après ce délai, si le message ne s'affiche pas dans ces
conditions, c'est qu'il y a erreur de mon site.

Donc, vous pouvez faire des tests approfondis, puis me dire si vous
obtenez des cas anormaux, indiquant une erreur du comportement de mon
site, en ce qui concerne la prise en compte de la configuration du
navigateur client.

C'est-à-dire : Le message s'affiche alors qu'il ne le devrait pas, ou
le contraire.

Celà me serait très utile que vous fassiez ces tests car moi-même, je
ne sais pas exactement quelles pourraient être, toutes les
configurations possibles de variation des adresses ip clientes, aussi
actuellement, j'ens erais plutôt, à a phase de vérification et
d'expérimentation. ;)

En ce qui me concerne, j'ai une adresse ip fixe, et une connexion
ADSL, mon site fonctionne parfaitement bien dans ces conditions.


Merci beaucoup pour vos tests.

Bien amicalement.

Jean François Ortolo
Avatar
Jean Francois Ortolo
Le 29/06/2012 07:03, Tonton Th a écrit :
On 06/28/2012 04:26 PM, Jean Francois Ortolo wrote:

S'il y avait des problèmes causés par des changements d'adresses ip,
je le saurais, car il y aurait des adresses ressemblantes qui se
suivent, en ordre chronologique.



Le répartiteur de charge me bascule de Free à Orange entre
deux pages, il se passe qui quoi ?





Rebonjour Monsieur

Voici théoriquement, ce qui pourrait, au pire, se passer, avec des
adresses ip changeantes, ou plusieurs adresses ip venant de la même
personne :

1- Une première requête http du client, avec l'adresse ip 1.

- Suivant que Javascript et/ou les Cookies sont interdits ou non,
le message s'affiche ou non.

2- Une deuxième requête http, du même client, avec une autre adresse
ip. 2

- Quel que soit le délai entre la première et la deuxième requête
http, le comportement est le même : Le message s'affiche ou non, de
manière normale.

Celà, en supposant, que les deux adresses ip, diffèrent par l'un des
trois premiers nombres de ces adresses ip.

Ce comportement, est du au fait que ces deux requêtes http, sont
considérées par mon site, comme deux visites différentes.


Le problème est plus compliqué, quand les deux adresses ip qui se
suivant, changent seulement par le dernier nombre d ces adresses ip.

Là, il y a deux cas :

1- La première requête http, présent l'adresse ip 1 au site, puis
change en moins d'un très petite fraction de seconde, avant que le
refresh ait pu avoir lieu.

Ce délai minimum de mon site , évidement, varie suivant les
connexion internet, plus ou moins rapide suivant la technologie
utilisée. Je l'ai fixé à 10 secondes au maximum, pour tenir compte des
connexions par modem téléphonique, qui sont, ej crois,les plus lentes.

Dans le cas ci-dessus, c'est la même adresse ip du point de vue de
mon site, puisque l'adresse ip filtrée ( = les trois premiers nombres ),
sont identiques, et elle s'est présentée il y a moins de 10 secondes,
donc de toute façon, le refresh se fait quand même ( si Javascript est
activé ), et mon site se comporte de façon normale.

2- Première requête http avec adresse ip 1.

10 secondes après, l'adresse ip n'a pas changé, donc mon site se
comporte normalement, et le refresh a lieu, si Javascript est activé.

Cs deux cas, correspondent en fait, au même cas, où l'adresse ip
filtrée ( trois prmiers nombres ), ne change pas.


Maintenant, que se passe-t-il, si deux visiteurs différents, ont des
adresses ip filtrées ( variables ou non ), identiques, et visitent en
même temps mon site ?

Cas 1 : Le premier visiteur se présente, puis le deuxième visiteur se
présente, après moins d'une fraction de seconde, c'est-à-dire avant que
le refresh du premier visiteur, ait eu la possibilité de se faire.

A ce moment-là, le premier visiteur a son refresh, si son Javascript
est activé, et mon site se comporte de manière normale.

Le deuxième visiteur, a aussi son refresh ( si Javascript est activé
), et tout est correct.


Cas 2- Le premier visiteur se présente, pus le deuxième visiteur se
présente, après que le refresh éventuel du premier visiteur ait eu lieu
( suivant que Javascript soit activé ou non pour le premier visiteur )

Les deux visiteurs sot considérés comme le même visiteur par mon
site, car leurs adresses ip filtrées sont les mêmes.

A ce moment-là, le deuxième visiteur n'a pas la variable de session
$_SESSION['js'] alimentée, donc son refresh se fait quand même, et mon
site répond de façon normale.


Tout ceci, dépend du fait, que la variable de session ne soit pas
encore alimentée, car c'est la première requête http, pour chacun de ces
deux visiteurs.

Si cette variable de session a déjà été alimentée, quel que soit le
visiteur, c'est que Javasript est activé, et que c'est au moins la
deuxième requête http faite par le visiteur.

Dans le Cas 1, le premier visiteur a sa variable de session alimentée
donc son refresh ne se fait pas, mais il n'y a pas de problème, si le
délai de 30 secondes depuis la première requête http, n'est pas dépassé.

En effet, mon site économise les refresh, en ne faisant pas de
refresh pour la même visite, si ce délai de 30 secondes n'est pas dépassé.

Dans le cas contraire, le message s'affiche, alors que son Javascript
est activé.

Le Cas 2 est identique au cas 1, de ce point de vue.


Donc, s'il y a plusieurs visiteurs d'adresse ip filtrée identique, et
que ceux-ci font des requêtes http alternées, dans des délais de moins
de 30 secondes, le visiteur ayant fait la requête http trop rapidement,
voit son message s'afficher.

Je n'ai pas d'autre alternative, pour limiter ces cas, qui devraient
être rares, de baisser le délai de 30 secondes, à moins que 30 secondes.

Mais à ce moment-là, il risquerait d'y avoir un refresh à chaque page
chargée, ce que je cherche à éviter.

En ce qui concerne les adresses ip entières identiques ( fixes ou
variables ), le problème est strictement identique cas ci-dessus, des
adresses ip filtrées identiques.

Merci beaucoup de vos tests.

Bien amicalement.

Jean François Ortolo
Avatar
Jean Francois Ortolo
Rebonjour Monsieur

Il y a probablement quelques erreurs d'inattention dans ma réponse
ci-dessus, donc vos tests feront foi. ;)

Bien amicalement.

Jean François Ortolo
Avatar
Jean Francois Ortolo
Bonsoir Monsieur

J'ai modifié, la prise en compte des adresses ip, servant de repère
pour savoir si c'est le premier chargement d'une page, ou le deuxième
chargement ( le refresh Javascript ).

D'autre part, je ne fais plus d'économie des refresh. Donc, à chaque
fois qu'un visiteur veut charger une page, et qu'il a Javascript activé,
il y a un refresh.

Si je faisais autrement, il y aurait parfois des affichages
intempestifs du message, même si Javascript et les Cookies sont actifs.

J'ai ramené le délai maximal théorique de chargement d'une page (
premier chargement ), à 7 secondes.

Celà évite, qu'après avoir atterri sur une page, le visiteur charge
lui-même de nouveau une page ( la même ou une autre ), en moins de temps
que ce délai accepté de chargement d'une page, ce qui aurait pour effet,
que ce nouveau chargement de page, ne sot pas suivi de refresh, et que
le message s'affiche quand même, bien que Javascript soit activé.

Avec ce délai fixé à 10 secondes,j'ai constaté moi-même ce problème,
donc j'ai ramené ce délai à 7 secondes.

Je vous laisse juge.

Si vous avez une ip fixe, et Javascript activé, arrivez-vous à
charger deux pages, suffisamment rapidement, pour que ce message
s'affiche quand même ?

En ce qui me concerne, je n'y suis pas arrivé.

Peut-être avec une connexion fibre... ;)

J'ai constaté, que les bots de Google, se suivent rapidement sur mon
site, ( délais > 7 secondes quand même... ;) ), avec des adresses ip
différentes, et n'ont pas Javascript activé, ce qui semble logique.

Ce délai de 7 secondes, vous semble-t-il suffisant, même pour des
connexions internet très lentes ?

Je vais probablement prochainement, installer un formulaire de
contact sur mon site, ce qui permettra mieux à mes visiteurs, de me
donner leurs avis sur les fonctionnalités de mon site.

Normalement,si ce délai de 7 secondes est dépassé par des connexions
internet lentes, le seul effet serait un affichage du message à chaque
page visitée, même si Javascript est activé.

Dans un contexte d'accès théorique futur payant à mon site, il serait
impossible, dans ces conditions, à ces visiteurs, de payer ou de
s'authentifier.

Merci beaucoup de vos réponses.

Bien amicalement.

Jean François Ortolo
Avatar
Jean Francois Ortolo
Le 29/06/2012 21:05, Jean Francois Ortolo a écrit :


Bonsoir Monsieur

J'ai modifié, la prise en compte des adresses ip, servant de repère
pour savoir si c'est le premier chargement d'une page, ou le deuxième
chargement ( le refresh Javascript ).





Beuh...

J'ai oublié de dire : je prend maintenant en compte, les adresses ip
entières, et non plus filtrées, comme avant.

Merci de me dire si vos tests montrent des erreurs de mon site.

Une erreur pourrait être : Le message s'affiche, alors qu'il ne
devrait pas s'afficher. ( si Javascript est activé, et les Cookies permis ).

Le contraire, peut se produire de manière temporaire, si Javascript
était activé, puis ne l'est plus.

Celà peut arriver, pendant au plus 3O secondes après avoir désactivé
Javascript.

Si ce délai est dépassé, c'est une erreur. ;)

Ce sont les seules erreurs détectables.

Merci beaucoup de vos réponses.

Jean François Ortolo
Avatar
SAM
Le 25/06/12 17:50, Jean Francois Ortolo a écrit :


Bonjour Monsieur ;)



oui, oui, bonjour, bonsoir !
mesdames, mesdemoiselles, messieurs,
chers lectrices et lecteurs,
évenanzendonkofète

Dans ma terminologie, et pour mes besoins actuels de cette application,
une adresse ip variable, est une adresse qui peut varier au cours de la
navigation d'un visiteur sur mon site.



On n'en a rien à faire des adresses IP (quelle qu'elles soient)
et ça a déjà été dit
---> il y a ici chez moi entre 1 à 5 ordis
---> la seule IP que ton serveur verra est celle de la box
<--- donc ça ne peut t'être utile

Hop !
zapping général de toutes circonvolutions autour du sujet "IP"

soit tu te contentes de la gestion de session(s) suivant PHP
soit tu te bases sur les cookies (de session ?) en donnant un nom(*)
aléatoire au visiteur s'il n'en a pas déjà eu un d'attribué.

(*) ça peut tout aussi bien être son "vrai" nom ou pseudo s'il s'est
inscrit préalablement (ou logué) et a été enregistré en BdD.
(ou l'ID correspondant au pseudo dans la table des adhérents)

Par ailleurs, celà non plus n'est pas important, car si le visiteur
dépasse ce délai maximal, la page chargée ensuite, sera seulement
chargée deux fois, avec un refresh, car le visiteur sera simplement
considéré comme un autre visiteur.

Et ceci, seulement si son adresse ip, varie.



Ben non ...
- le gus accepte les cookies (obligatoirement !)
- le cookie du gus est connu (nouveau ou ancien est-ce important ?)
- accessoirement (bien qu'on ne sache plus/pas pourquoi) si à la page
suivante le délai est dépassé on la recharge

J'identifie que c'est le même visiteur, avec des infos de session. Très
bien.

Et si les cookies sont refusés ? Alors à chaque fois c'est un nouveau



non, comme chez d'autres(*), si les cookies sont refusés hop! pas de
pronostic et vavoirayeur

(*) comment est mis à jour le "panier" sur les sites marchands ?
(alors qu'on ne s'est pas encore logué !)

visiteur, donc c'est le premier chargement de la page, donc il y a un
refresh systématique et répétitif sans fin, si les cookies sont refusés ?



non, si pas de cookie hop! on envoie la page (ou l'extrait) indiquant
que les cookies sont obligatoires
et ...
... bien sûr
pas de JS de refresh

J'avoue que ce que je pourrais faire, lors du premier chargement, serait
de faire le refresh ( donc, deuxième chargement de la page en mode
Javascript ), avec le protocole get, et un paramètre qui s'il existe, me
servirait à savoir que c'est le deuxième chargement.



les cookies peuvent t'informer de tout ça quoi tu veux (à condition de
les avoir créés)

- le cookie "nom" existe ? oui: on le lit, non: on le crée
- le cookie "date" existe ? oui: on le lit, non: on le crée

ensuite on agit en fonction et remet à jour le cookie "date"

(zap zip zop!)

Je ne pourrais le savoir, que si le visiteur accepte les Cookies... ;(



voui

Si le visiteur n'accepte pas les Cookies, problème insoluble ?



le visiteur *doit* les accepter épicétou

Dans ce cas, un refresh obligatoire à chaque page ?



que de gâchis !


--
Stéphane Moriaux avec/with iMac-intel

* Unknown - détecté
* Anglais
* Français
* Espagnol

* Anglais
* Français
* Espagnol

<javascript:void(0);>
Avatar
SAM
Le 25/06/12 23:39, Jean Francois Ortolo a écrit :

Quant au reste du nouvel algorithme que Monsieur Miakinen m'a suggéré,
et qui est effectivement beaucoup plus performant que le mien, je n'ai
besoin pour passer à la programmation, que de savoir comment traiter le
cas où Javascript est activé, et les Cookies refusés.



On suppose que le PHP arrive à voir qu'il n'y a pas de cookies.
Il y a alors un JS dans le head qui fait immédiatement rafraichir vers
la page avec les scripts JS nécessaires

Si pas de cookie ni de JS alors on reste sur la page là (qui ne montre
peut-être qu'un message réclamant cookies et/ou JS)

Comment, dans ce cas-là, savoir si le visiteur qui visite votre page peu
de temps après une première visite sur une page (la même ou une autre,
peu importe ), est bien passé sur le site il y a très peu de temps ?



On l'sait pas (sauf si session PHP)
et alors ? est-ce grave ? et en quoi ?

Comment, sans les Cookies, transformer en gros, le protocole HTTP, qui
ne mémorise pas les accès http, en protocole avec mémoire ?



on peut (parfois) savoir de quelle page(url) le visiteur vient

referer ? (ça n'existe pas en PHP ?)

Je ne demande pas le feu, simplement une mémoire très courte, de
quelques secondes.

30 secondes me suffirait.

Celà me permettrait, de ne pas faire de refresh si le délai depuis le
dernier chargement manuel d'une page sur mon site ( n'importe laquelle
), est inférieur à 30 secondes.



Heu ... tu veux vraiment faire recharger chaque page toutes les 30
secondes ?

meta refresh ???

--
Stéphane Moriaux avec/with iMac-intel
Avatar
SAM
Le 26/06/12 11:57, Olivier Miakinen a écrit :

Une autre consiste à créer un formulaire avec champs hidden, dont la
soumission est lancée par JavaScript. Ainsi, non seulement tu as ton
refresh, tu vérifies au passage que JavaScript fonctionne (si le
bouton est invisible et n'est accessible que par JS), et il n'y a
aucun paramètre passé dans l'url (c'est dans les champs hidden).



"hidden" n'a rien à voir avec les paramètres passés en url
c'est le mode GET ou POST qui fait la différence
- GET : visible
- POST : invisible
(savoir si Google interprète et retient l'url "get" ?)
les champs peuvent donc être normaux (text ou password)

Ouf !



anéfé !

--
Stéphane Moriaux avec/with iMac-intel
Avatar
SAM
Le 27/06/12 13:18, Jean Francois Ortolo a écrit :

Est-ce possible, que plusieurs visiteurs avec la même adresse ip ,
visitent mon site strictement en même temps, à 30 secondes près ?



ce ne doit pas être courant mais pas impossible

Mon fils et moi, qui partageons la même box-adsl, pouvons tt à fait et
soudainement nous intéresser et nous passionner pour les courses de
chevaux (et les paris !!!) par exemple, et donc aller sur ce site en
même temps y cliquoter frénétiquement.
Et si jamais mon épouse et ma fille s'y mettent, je te dis pas !

il faut (normalement) s'en tenir à la 2ième partie : "possible oui"

donc KKboudin, on jette !

J'ai mis en place, l'enregistrement dans la table MySQL CONNEXION, de
toutes les adresses ip datant de moins de 35 jours.



Oui, et ?

Du moins, j'ai d'abord pris les adresses ip entières ( c'est de l'ip4,
apparemment personne de mes visiteurs n'est en ip6 ), mais j'ai constaté
qu'il y avait des adresses très similaires qui se suivaient de manière
rapprochée en ordre chronologique.



et ???

Je n'arrive pas à comprendre l’intérêt de la chose ... mébon.


--
Stéphane Moriaux avec/with iMac-intel
Avatar
SAM
Le 28/06/12 18:08, Jean Francois Ortolo a écrit :
Le 28/06/2012 16:57, Olivier Miakinen a écrit :
Bonjour,

À l'occasion, tu voudras bien nous expliquer (en langage courant,
pas en terme de PHP et SQL) ce qu'est censé apporter ce système de
doubles requêtes ?

Cordialement,






Bonjour Monsieur

L'intérêt, est de détecter si le navigateur client, a Javascript activé



ça, ça se fait de la manière suivante :
on envoie une page qui doit fonctionner sans JS
et si le JS est activé il saura y lire une redirection JS vers la page
supposée fonctionner en JS (ça se fait avant même de charger tte la page)

ou non, e/ou les Cookies acceptés ou non.



Bon, là le PHP doit y arriver ;-)

Si l'un de deux, ou les deux, sont interdits, alors un message s'affiche
en haut de l'écran de pratiquement toutes les pages de mon site,
indiquant qu'il est souhaitable d'activer Javascript,et de permettre les
Cookies.

Je ne distingue pas, les deux possibilités de Javascript et des Cookies,
et le message est le même dans tous les cas où ce message apparaît.



sauf que ... il est tt à fait possible que seuls les cookies soient
nécessaires

alors on demande aux visiteurs de les activer et puis voilà !


Pour l'instant, je n'ai pas besoin de celà, mais à terme, si je rend mon
site payant, le système de paiement Allopass ( que j'ai déjà programmé
sur mon site, mais n'est pas actif ), nécessite que Javascript soit
activé, et les Cookies acceptés.



bon ... alors on fait tout ça en JS et hop!
(Le JS peut aussi voir/modifier/créer les cookies)

--
Stéphane Moriaux avec/with iMac-intel
2 3 4 5 6