Fiabilité de la fonction time() en php ?

WRInaute discret
Bonjour à tous,

J'ai fait un script qui me permet de savoir combien de temps restent les internautes sur certaines pages de mon site. Mais ça bugge parfois et j'aimerais avoir votre avis la dessus.

Le principe du script est le suivant :
- quand l'internaute arrive sur la page, je récupère la date courante avec time() en php, et inscrit cette date dans une table de données.
- lorsque l'internaute quitte la page, je génère un évenement ajax qui appelle une page sur mon serveur sur laquelle je récupère la date courante toujours avec time() et l'enregistre dans la table de données.

Ensuite, il n'y a plus qu'à faire la soustraction entre les deux dates pour savoir combien de temps en secondes l'internaute est resté sur la page.

La plupart du temps, ça marche impec. Mais parfois je tombe sur des résultats bizarres du style : l'internaute est resté "-12" secondes o_O

Une idée de ce qui pourrait générer le problème ? Est-ce que cela viendrait de la fonction time() qui n'est pas fiable ? Je suis sur un mutualisé ovh (90gp), est-ce qu'on pourrait imaginer qu'ils utilisent plusieurs serveurs pas forcément synchronisés entre eux (et que donc time() renvoie une date différente selon le serveur interrogé) ? Si c'est le cas, comment puis-je contourner le problème ?

Merci beaucoup !
 
WRInaute accro
Ce ne serait pas plutôt que dans certains cas tu mélanges le "départ" d'une page avec l'"arrivée" sur une autre?

Jacques.
 
WRInaute accro
jcaron a dit:
Ce ne serait pas plutôt que dans certains cas tu mélanges le "départ" d'une page avec l'"arrivée" sur une autre?
Par exemple, avec un scénario du genre:
1. l'internaute affiche la page (heure d'entrée = 8h43'10")
2. l'internaute quite la page (heure de sortie = 8h46'20")
3. l'internaute change d'avis et revient sur la page (heure d'entrée = 8h46'32")
=> heure de sortie - heure d'entrée = - 12 secondes.

Jean-Luc
 
WRInaute occasionnel
oui, je pense que c'est plutôt un souci du genre que la fiabilité de la fonction ? Ça se saurait autrement. ;)
 
WRInaute discret
jeanluc a dit:
jcaron a dit:
Ce ne serait pas plutôt que dans certains cas tu mélanges le "départ" d'une page avec l'"arrivée" sur une autre?
Par exemple, avec un scénario du genre:
1. l'internaute affiche la page (heure d'entrée = 8h43'10")
2. l'internaute quite la page (heure de sortie = 8h46'20")
3. l'internaute change d'avis et revient sur la page (heure d'entrée = 8h46'32")
=> heure de sortie - heure d'entrée = - 12 secondes.

Jean-Luc

Salut,

Merci pour la piste, mais à priori c'est pas possible, car à chaque affichage j'attribue un identifiant aléatoire unique, et lors de l'appel pour signifier que l'internaute quitte la page, l'identifiant est transmis. Donc à chaque arrivée correspond un départ et vice versa et il n'y a pas de mélange :)

Personne n'a vraiment jamais eu de soucis avec time() chez Ovh ?

++
 
WRInaute accro
Aléatoire n'est pas forcément unique... Il y a des méthodes nettement plus efficaces pour s'assurer de l'unicité d'un identifiant.

Et dans le cas où l'utilisateur fait "back", ça donne quoi?

Jacques.
 
WRInaute discret
jcaron a dit:
Aléatoire n'est pas forcément unique... Il y a des méthodes nettement plus efficaces pour s'assurer de l'unicité d'un identifiant.
J'utilise uniqid() de php pour cela. Quelles sont les méthodes que tu évoques pour assurer l'unicité d'un identifiant ?

jcaron a dit:
Et dans le cas où l'utilisateur fait "back", ça donne quoi?
Jacques.
Hum... C'est vrai que je n'avais pas pensé à ça :S
Je ne connais pas le comportement du script dans ce cas là, je vais investiguer :)

Merci !
 
WRInaute discret
jcaron a dit:
Et dans le cas où l'utilisateur fait "back", ça donne quoi?
Je viens de tester, ça fonctionne. Un nouvel identifiant est généré, une deuxième pageview est enregistrée et mesurée..
 
Discussions similaires
Haut