7340 sujets

Développement web côté serveur, CMS

Bonjour à tous
En testant la fonction PHP get_browser(), j'obtiens des résultats intéressants:
stdClass Object
(
    [browser_name_regex] => ~^mozilla/5\.0 \(.*windows nt 10\.0.*rv:.*\) gecko.* firefox.*$~
    [browser_name_pattern] => Mozilla/5.0 (*Windows NT 10.0*rv:*) Gecko* Firefox*
    [parent] => Firefox Generic
    [platform] => Win10
    [comment] => Firefox Generic
    [browser] => Firefox
    [browser_maker] => Mozilla Foundation
    [device_type] => Desktop
    [device_pointing_method] => mouse
    [version] => 0.0
    [majorver] => 0
    [minorver] => 0
    [ismobiledevice] => 
    [istablet] => 
    [crawler] => 
)

Dans quelle mesure peut on faire confiance à ces informations, que PHP retrouve dans le header http?
Php, javascript ou autre... à partir du moment où le script se base sur l'user agent, ce qui est ici le cas (mais comment pourrait-il en être autrement ?), ne jamais faire confiance à ce type de donnée.
Bonjour,

Accordez-y autant de crédit qu'à l'agent utilisateur (user-agent). En fait cette fonction détermine les informations en fonctions de celui-ci et du fichier browscap.ini

Perso je n'utilise ces données qu'à des fins statistique. En aucune manière cette valeur n'influence l'expérience utilisateur. Je vous invite à faire de même.



Source: Php.net - get_browser()
Modifié par Greg_Lumiere (17 Mar 2017 - 14:09)
Merci de vos réponses
Je voudrais simplement utiliser ces informations pour détecter les versions anciennes des navigateurs et recommander aux utilisateurs de changer de version.
En utilisant le cookie _ga de Google ou l'adresse IP, je noterai dans une table à quelle date j'ai affiché ce message de façon à ne pas le renvoyer à chaque affichage de page.
Je sais bien que rien n'est pus menteur que ce que dit un navigateur, mais je pense que dans ce cas précis ça devrait être acceptable.
Qu'en pensez vous?
A mon avis, si le but est uniquement de porter un message, vous pourriez utiliser les données issue de l'agent utilisateur - que ce soit par get_browser() ou en scrutant directement la variable globale qui s'y réfère.

J'y verrais bien un texte "avec des pincettes" genre Nous avons détecté que vous utilisiez telle version du navigateur untel, nous suggérons fortement de procéder à sa mise-à-jour si vous souhaitez profitez d'une meilleur expérience d'utilisation de notre site.

Par contre je vous déconseille fortement d'associer cette détection au non chargement de certaines fonctionnalités qui vous paraîtraient incompatible avec les données relevées.
A mon avis, si le but est uniquement de porter un message, vous pourriez utiliser les données issue de l'agent utilisateur - que ce soit par get_browser() ou en scrutant directement la variable globale qui s'y réfère.

J'y verrais bien un texte "avec des pincettes" genre Nous avons détecté que vous utilisiez telle version du navigateur untel, nous suggérons fortement de procéder à sa mise-à-jour si vous souhaitez profitez d'une meilleur expérience d'utilisation de notre site.

Par contre je vous déconseille fortement d'associer cette détection au non chargement de certaines fonctionnalités qui vous paraîtraient incompatible avec les données relevées.
Oui, à la lecture de plusieurs discussions sur le sujet, je me contenterai de tester "en dur" le nom du navigateur et sa version dans $_SERVER['HTTP_USER_AGENT']
Non seulement cette fonction est gourmande en temps et mémoire, semble-t-il, mais en plus des informations aussi intéressantes que
[device_type] => Desktop
[device_pointing_method] => mouse

sont largement sujettes à caution.
C'est dommage...

Mais nous vivons dans le monde de la "post-vérité" Trumpiste, n'est-il pas; et toute "vérité" est à prendre avec des pincettes.
Modifié par PapyJP (17 Mar 2017 - 15:09)
PapyJP a écrit :
Merci de vos réponses
Je voudrais simplement utiliser ces informations pour détecter les versions anciennes des navigateurs et recommander aux utilisateurs de changer de version.

S'il s'agit simplement de détecter une génération donnée de navigateur, ne fonctionnant pas avec certaines règles css indispensables au layout du site, afficher une boite en tenant simplement compte de cette règle peut se révéler très simple...

Imaginons par exemple que nous ayons absolument besoin de la fonction calc() + unités rem pour le layout du site, nous pourrions alors afficher un message, contenu ici dans la classe "old-browers", définit comme ceci :
.old-browers {
  position: fixed
  z-index: 4000
  top: 0
  left: 0 /* @note Fallback à destination des anciens navigateurs parmis lesquels IE9- */
  left: calc(-9999rem) /* @note Si reconnaissance de l'unité rem + fonction calc(), alors on masque le message */
  width: 100%
  height: 100%
  padding: 20px
  /* etc... */
}


PapyJP a écrit :
En utilisant le cookie _ga de Google ou l'adresse IP, je noterai dans une table à quelle date j'ai affiché ce message de façon à ne pas le renvoyer à chaque affichage de page.

Personnellement je passe par le localStorage. Exemple pour fermer le message obligatoire de la CNIL, afin qu'il ne se réaffiche pas après que l'utilisateur l'ait fermé une fois :
// -----------------------------------------------------------------------------
// @section     CNIL
// @description Gestion du message d'information exigé par la CNIL
// -----------------------------------------------------------------------------

function termsUse() {
	var el = document.getElementById( 'terms-use' );
	if ( el ) {
		var cmd = el.querySelectorAll( 'button' )[0];
		el.style.display = 'block'; // @note Par défaut l'élément est caché afin d'éviter un visuel désagréable au chargement de la page
		cmd.onclick = function(){
			localStorage.setItem( 'termsuse', 'true' );
			el.style.display = 'none';
		};
		if (localStorage.getItem( 'termsuse' ) === 'true' ) {
			el.style.display = 'none';
		}
		//localStorage.removeItem( 'termsuse' ); // Réinitialisation de la valeur pour les tests, la clef peut aussi s'effacer directement via l'outil d'inspection
	}
}
termsUse();

Modifié par Olivier C (17 Mar 2017 - 16:47)