Comment détecter si le navigateur client accepte les cookies ?


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1664
Inscription: 14 Aoû 2002

Comment détecter si le navigateur client accepte les cookies ?

Message le Lun Oct 18, 2010 20:19

Bonsoir

J'ai pensé... gérer le fait de mémoriser un contenu spécifique au cours de la navigation d'un navigateur sur un site, en le transmettant dans des fichiers, dont les noms soient dérivés de l'identificateur de session, donné par la fonction php session_id()

Cependant... Il va de soi, que je ne pourrais récupérer le contenu d'un fichier comme celà, qu'à partir du moment où je sais son nom, donc l'identificateur de session, ce qui suppose que celui-ci ne change pas quand un visiteur passe d'une page à une autre.

Mais... Pour que celà soit possible, il faut, soit que le navigateur client accepte les cookies, soit que l'identificateur de session, soit transmis classiquement en get dans l'url ( de la forme : PHPSESSID=...etc...

Le problème, est d'une part que j'ai des urls rewritées, et d'autre part que je ne souhaite pas qu'il y ait des identificateurs de session dans les urls ( même urls rewritées ), pour des raisons de référencement.

Celà m'amène donc, au point de départ: Pouvoir vérifier automatiquement et rapidement, si le navigateur client accepte les cookies, ce qui fait qu'il ne sera plus nécessaire d'utiliser des fichiers, puisque les cookies suffiront pour transmettre les données souhaitées, pendant la naviagation d'un visiteur.

Donc, voici ma question : Comment, d'une manière fiable, savoir si un navigateur client accepte les cookies, de préférence en php, sachant que s'il n'accepte pas les cookies, il sera très difficile de savoir pendant l'exécution d'une page ( = d'un script php ), si c'est la page initiale, ou la deuxième page exécutée ?

Si je savais que les cookies ne sont pas acceptés par le navigateur client, je pourrais demander au visiteur, d'accepter les cookies, sachant que celà sera nécessaire, pour s'abonner et/ou s'authentifier, et accéder aux pronostics.

D'autre part, j'ai besoin que cette vérification ne soit pas faite en Javascript, car précisément j'ai besoin que les cookies soient activés, pour pouvoir vérifier que Javascript l'est aussi. ( c'est un détail ).

Ce problème de cookie, est relatif à la programmation en cours du site http://www.lespronostics.com , dont je suis en train de mettre au point les scripts d'abonnement ( téléphone surtaxé et Carte Bleue ) et d'authentfication des abonnés.

Merci beaucoup de votre réponse à ma question.

Bien à vous.

Amicalement.

Jean-François Ortolo


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1664
Inscription: 14 Aoû 2002

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Lun Oct 18, 2010 21:01

Rebonsoir

Bon, je me répond à moi-même, après avoir consulté Google et un site de forum de programmation asp/php :

Il suffit de tester si la constante SID , est vide ou non, après avoir activé la session avec session _start();.

Si SID est vide, c'est que le navigateur accepte les cookies. Dans le cas contraire, il n'accepte pas les cookies, et SID contient l'affectation du cookie de session, de la forme ( le plus souvent ) : PHPSESSID=<value>

Seulement, il y a un bug... C'est que celà n'est valable, que si la page a été rechargée au moins une fois.

Si le script contenant l'activation de la session puis le test de SID, n'est affiché qu'une seule fois, SID est non vide dans tous les cas. ;(

Cependant,... Dans mon cas, celà ne devrait pas poser de problème, car le script de test d'acceptation ou non de cookie, sera nécessairement différent de la première page accédée, du site par le visiteur.

J'ai donc simplement besoin, de déclencher une session dans toutes les pages, puis de tester SID au moment du test.

Problème résolu.

Bien à vous.

Amicalement.

Jean-François Ortolo


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Lun Oct 18, 2010 21:10

tu peux aussi au choix :

1 - poser un cookie et le relire pour voir

ou

2 - si ton site a analytics, tu lis le cookie utma de google ...


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Lun Oct 18, 2010 21:12

tu peux aussi au choix :

1 - poser un cookie et le relire pour voir

ou

2 - si ton site a analytics, tu lis le cookie utma de google ...


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1664
Inscription: 14 Aoû 2002

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Lun Oct 18, 2010 22:03

Zecat a écrit:tu peux aussi au choix :

1 - poser un cookie et le relire pour voir

ou

2 - si ton site a analytics, tu lis le cookie utma de google ...



Bonsoir Zecat ;)

Je sais bien, mais... :

Je ne peux pas savoir, quand un script s'exécute, si je suis sur la première page, ou la deuxième.

Le procédé que j'envisage, est facile à implémenter sur le site :

Je déclenche une session sur toutes les pages du site, avec session_start().

Et puis, dans la page ( == le script php ) où je fais le test, je teste si SID est vide.

Facile...

Merci beaucoup de ta réponse. ;)

Amicalement.

Jean-François Ortolo


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mar Oct 19, 2010 21:13

Zecat a écrit:si ton site a analytics, tu lis le cookie utma de google ...
sauf que ce cookie n'existera qu'à partir de la 2° page lue


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mar Oct 19, 2010 21:23

Leonick a écrit:
Zecat a écrit:si ton site a analytics, tu lis le cookie utma de google ...
sauf que ce cookie n'existera qu'à partir de la 2° page lue

et si le gars n est jamais venu sur le site :wink:


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1664
Inscription: 14 Aoû 2002

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mer Oct 20, 2010 9:24

J'ai mis au point dans mon esprit...

...Un procédé pour vérifier à la fois si Javascript est accepté, et/ou si les cookies sont acceptés.

Un script php reçoit un paramètre choix en GET, qui peut être à la valeur 1 ( première exécution ), ou 2 ( deuxième exécution ).

Si choix==1, le script démarre la session ( session_start(); ) , puis alimente la variable de session js, avec le nombre de secondes depuis le 1er Janvier 1970 : $_SESSION['js'] = time(); , puis fait un exit; sans rien afficher, après avoir fait un session_write_close(); pour bien faire.

Si choix == 2, le script démarre la session, puis évalue la valeur de la constante SID.

Si SID est vide ( empty(SID) === true), le script affiche "OK#", sinon il affiche "BAD#", puis il fait un session write_close(); pour faire bonne mesure, puis rend la main avec un exit;

Donc, dans la page html, il y a un script Javascript, qui lance sucessivement, de manière synchrone, dans les règles de l'art, ce script php, successivement avec le paramètre choix=1 puis choix=2 en GET, avec en plus un paramètre dummy=new Date.getTime(); , pour que le script soit réellement lancé dans tous les cas ( En effet sinon, il y aurait simplement un appel au cache, et le script ne serait pas lancé aux chargements suivants de la page html ).

Après le premier lancement, il ne se passe rien, mais la variable de session js a été alimentée.

Après le deuxième lancement, la variable Javascript responseText est évaluée, elle est tronquée juste avant le dièze terminal, puis sa valeur est évaluée.

Si le résultat est égal à "OK", pas de fenêtre modale, tout s'est bien passé, les cookies sont acceptés par navigateur client.

Si le résultat est égal à "BAD", une fenêtre modale Javascript s'affiche, indiquant qu'il faut configurer le navigateur, pour accepter les cookies.

--------------

Bien entendu, ce traitement n'est possible qu'en Javascript, sinon la variable de session js n'est pas alimentée, ou sa valeur est inférieure de plus de 300 secondes ( == 5 minutes ), à celle de la fonction php time();

Le script php produisant la page html prend en compte celà, et affiche ses éléments en fonction.

Par exemple, il peut afficher un message indiquant qu'il faut activer le Javascript sur le navigateur client, et afficher son formulaire ( accessible uniquement en Javascript ), en mode "disabled", pour que le visiteur soit obligé d'activer Javascript, pour l'utiliser.

Le seul bug, est que ce message ( et le mode "disabled" ), seront affichés par défaut lors du premier chargement de la page html du site, même si Javascript est activé. En effet, le script php générant la page html, s'effectue avant le script Javascript qu'elle contient.

Je pourrais, dans le script Javascript, déclencher un reload de la page html, d'une manière ou d'une autre ( Il y a différentes instructions possibles suivant la version de Javascript ), mais je ne sais pas comment détecter le premier chargement de la page html, de façon à ne faire un reload de la page, qu'au moment du premier chargement de la page html. Autrement, il y aurait des rechargements infinis de la page html.

Pourriez-vous m'indiquer, un moyen de détecter le fait que la page html est chargée pour la première fois ?

Celà me permettrait de soulager le visiteur, de devoir recharger la page manuellement.

J'ai envisagé de tester l'existence d'un fichier dont le nom dépendrait du client. Mais là, le problème est encore de disposer d'une valeur caractéristique de la connexion client, donc équivalente à un identificateur de session. Et si les cookies sont refusés... ;(

Comment faire ?

Merci beaucoup de vos réponses.

Amicalement.

Jean-François Ortolo


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mer Oct 20, 2010 10:20

le sid, il faut laisser le serveur le gérer, car là, en utilisant uniquement les secondes, tu vas avoir des doublons avec des visiteurs arrivant au même moment.
une solution, que Zecat devrait apprécier :wink:, serait de poserles cookies et de faire recharger la page. Tu enregistres en parallèle l'ip du visiteur dans un fichier et lors de l'arrivée d'un visiteur sans cookie, tu vérifies si l'ip se trouve enregistrée dans ton fichier il y a moins de 2-3 secondes (laisser un petit temps de latence pour que le navigateur ait le temps de charger et recharger). A voir, pour améliorer avec de l'ajax


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1664
Inscription: 14 Aoû 2002

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mer Oct 20, 2010 11:33

Bonjour Leonick

En fait, j'ai trouvé théoriquement, comment détecter si la page a été chargée pour la première fois.

Lors du premier lancement du script ( choix == 1 ), celui-ci alimente la variable de session $_SESSION['js'] , puis teste l'existence du fichier session_ . session_id() . ".txt"

S'il n'existe pas, il le remplit avec la valeur du session_id(); ( ou avec n'importe quoi ), et affiche la chaîne "REP#", qui indique au script Javascript, qu'il faut recharger la page( window.location.reload(true); ).

Lors du deuxème lancement du script, tout de suite après, il y a les instructions : $sid=SID; , et :

if(empty($sid))
echo"OK#";
else
echo "BAD#";

Si le script rend : "BAD", dans le script Javascript, une fenêtre modale est déclenchée, indiquant qu'il faut accepter les cookies.

J'ai placé un script de test, à l'url : http://www.lespronostics.com/squelettes/tmp_js.html

Cà marche.

Vous pouvez tester, avec Javascript désactivé ( rien ne se passe ), pui sactivé et les cookies refusés ( la fenêtre modale s'affiche ), ou accepté ( elle ne s'affiche pas ).

L'étape suivante, est de tester en php, si la variable $_SESSION['js'] est valide ( existe et date de moins de 5 minutes ).

Je ferai celà ce soir.

Comme la page a nécéssairement été rechargée si Javascript est activé, cette variable est valide, si et seulement si Javascript est activé.

Il est donc possible de faire un traitement automatique, en fonction de si Javascript est activé ou non.

D'autre part, le visiteur n'a plus besoin de recharger sa page, manuellement.

Problème résolu. ;)

Bien à toi.

Amicalement.

Jean-François Ortolo


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mer Oct 20, 2010 11:47

ortolojf a écrit:L'étape suivante, est de tester en php, si la variable $_SESSION['js'] est valide ( existe et date de moins de 5 minutes ).
comme dit au dessus, il faut laisser le serveur gérer lui-même les sessions. Si tu veux une durée de 5', tu règle ça au niveau des paramètres du serveur


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mer Oct 20, 2010 11:52

par contre, pourquoi utiliser ajax ? le fait qu'en js on ne trouve pas de cookie (qui devraient y être vu que la page a été chargée) devrait suffire pour afficher l'alerte ?


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1664
Inscription: 14 Aoû 2002

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mer Oct 20, 2010 16:00

Leonick a écrit:
ortolojf a écrit:L'étape suivante, est de tester en php, si la variable $_SESSION['js'] est valide ( existe et date de moins de 5 minutes ).
comme dit au dessus, il faut laisser le serveur gérer lui-même les sessions. Si tu veux une durée de 5', tu règle ça au niveau des paramètres du serveur



Bonjour Leonick

Il y a une différence entre : variable de session non existante ( ou expirée ), et variable de session datant de plus de 5 minutes.

De toute manière, ça ne mange pas de pain d'affecter la valeur time() à cette variable de session. De plus, cette affectation est faite théoriquement, à chaque chargement de page...

Amicalement.

Jean-François Ortolo


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1664
Inscription: 14 Aoû 2002

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mer Oct 20, 2010 16:11

Leonick a écrit:par contre, pourquoi utiliser ajax ? le fait qu'en js on ne trouve pas de cookie (qui devraient y être vu que la page a été chargée) devrait suffire pour afficher l'alerte ?



Bonjour Leonick

J'ai besoin de tester si Javascript est activé ou non. Donc j'utilise Ajax, qui, s'il fonctionne, m'indique que Javascript est activé.

La variable de session $_SESSION['js'] , si elle existe et est valide, indique que Javascript est activé, autrement j'affiche le formulaire d'abonnement Carte Bleue, en mode "disabled", de manière à ce que le visiteur ne puisse pas l'utiliser. Avec un message demandant au visiteur d'activer le Javascript.

En effet, ce formulaire fonctionne avec une fonction Javascript ( plusieurs fonctions Javascript ) associée, et ne fonctionnerait pas du tout si Javascript n'était pas activé.

D'autre part, je préfère que les cookies soit acceptés, pour pouvoir authentifier un visiteur connecté, pour lui permettre l'accès aux pronostics, s'il s'est identifié avec le formulaire.

L'intermédiaire de paiement est Allopass, et j'ai été obligé de faire de véritables acrobaties pour m'arranger de son interface de formulaires, d'abonnement ou d'accès. Pour les abonnements Carte Bleue, ces formulaires fonctionnenet avec Javascript. C'est comme ça. ;(

Cependant, Allopass a un avantage, c'est qu'ils payent réglo, contrairement à l'intermédaire de paiement qu'avait mon site partenaire, avant d'être migré vers Allopass. Je ne dis pas lequel...

Je vais faire le dernier test ce soir pour tmp_js.html , puis commencer à assembler le script php qui générera la page html où figureront les formulaires, et les scripts Javascript.

Bien à toi.

Amicalement.

Jean-François Ortolo


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19592
Inscription: 8 Aoû 2004

Re: Comment détecter si le navigateur client accepte les cookies ?

Message le Mer Oct 20, 2010 16:19

la page me semble bien
Par contre, qu'est ce que ça fait au niveau du visiteur si le délai de 5' est dépassé ? a-t-il encore besoin de sa variable de session ?
si tu affectes la valeur de time(), tu risques de te retrouver avec plusieurs personnes qui auront la même variable de session, et donc qui pourraient avoir accès aux pages payantes, mais sans payer et sans avoir tenté de passer outre ta protection.
Le mieux serait de mettre l'heure d'arrivée, si tu en as besoin, dans la variable de session, mais le sid resterait calculé par le serveur. Si tu veux absolument le créer toi même, fais plutôt un md5 de l'heure d'arrivée, de l'ip de connexion et du UA, en ajoutant une autre valeur permettant d'éviter qu'un internaute ne se crée lui-même son propre sid

Comment détecter si le navigateur client accepte les cookies ?

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité